New version of Getting Started with Cayenne guide. Tutorial now based on IDEA instead of Eclipse.
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/bfdc4156 Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/bfdc4156 Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/bfdc4156 Branch: refs/heads/master Commit: bfdc4156e21bf6aa5ed821ef432a876b3060a7bc Parents: 2c2516c Author: Nikita Timofeev <stari...@gmail.com> Authored: Wed Dec 7 12:51:08 2016 +0300 Committer: Nikita Timofeev <stari...@gmail.com> Committed: Wed Dec 7 12:51:08 2016 +0300 ---------------------------------------------------------------------- .../resources/stylesheets/html-no-parts.xsl | 25 ------- docs/docbook/getting-started/pom.xml | 27 -------- .../getting-started/src/docbkx/java-classes.xml | 4 +- .../src/docbkx/object-context.xml | 16 ++--- .../src/docbkx/object-relational-mapping.xml | 4 +- .../src/docbkx/persistent-objects.xml | 7 +- .../src/docbkx/starting-project.xml | 2 +- .../getting-started/src/docbkx/webapp.xml | 69 +++++++++---------- .../getting-started/src/images/base-datamap.png | Bin 88124 -> 94872 bytes .../src/images/base-datanode.png | Bin 89654 -> 96978 bytes .../src/images/idea-configuration-menu.png | Bin 17193 -> 32911 bytes .../src/images/idea-run-configuration.png | Bin 93801 -> 93059 bytes .../src/images/modeler-artistid.png | Bin 65420 -> 65879 bytes .../src/images/modeler-deleterule.png | Bin 82965 -> 83349 bytes .../src/images/tutorial-idea-project.png | Bin 51077 -> 48037 bytes 15 files changed, 49 insertions(+), 105 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/docbook-stylesheets/src/main/resources/stylesheets/html-no-parts.xsl ---------------------------------------------------------------------- diff --git a/docs/docbook/docbook-stylesheets/src/main/resources/stylesheets/html-no-parts.xsl b/docs/docbook/docbook-stylesheets/src/main/resources/stylesheets/html-no-parts.xsl deleted file mode 100644 index 0659004..0000000 --- a/docs/docbook/docbook-stylesheets/src/main/resources/stylesheets/html-no-parts.xsl +++ /dev/null @@ -1,25 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - ~ Licensed to the Apache Software Foundation (ASF) under one - ~ or more contributor license agreements. See the NOTICE file - ~ distributed with this work for additional information - ~ regarding copyright ownership. The ASF licenses this file - ~ to you under the Apache License, Version 2.0 (the - ~ "License"); you may not use this file except in compliance - ~ with the License. You may obtain a copy of the License at - ~ - ~ http://www.apache.org/licenses/LICENSE-2.0 - ~ - ~ Unless required by applicable law or agreed to in writing, - ~ software distributed under the License is distributed on an - ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - ~ KIND, either express or implied. See the License for the - ~ specific language governing permissions and limitations - ~ under the License. - ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--> -<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - version="1.0" xmlns:d="http://docbook.org/ns/docbook"> - - <xsl:include href="html.xsl"/> - <!--xsl:param name="generate.section.toc.level">2</xsl:param--> -</xsl:stylesheet> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/pom.xml ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/pom.xml b/docs/docbook/getting-started/pom.xml index 2df0646..6b5a5c6 100644 --- a/docs/docbook/getting-started/pom.xml +++ b/docs/docbook/getting-started/pom.xml @@ -36,32 +36,5 @@ <directory>target/site</directory> </resource> </resources> - <plugins> - <plugin> - <groupId>com.agilejava.docbkx</groupId> - <artifactId>docbkx-maven-plugin</artifactId> - <executions> - <execution> - <id>build-html</id> - <configuration> - <htmlCustomization>${project.stylesheetdir}/stylesheets/html-no-parts.xsl</htmlCustomization> - <chunkedOutput>true</chunkedOutput> - <postProcess> - <copy todir="${basedir}/target/site/index/css"> - <fileset dir="${project.stylesheetdir}/css" /> - </copy> - <copy todir="${basedir}/target/site/index/images"> - <fileset dir="${basedir}/src/images" /> - </copy> - </postProcess> - </configuration> - <phase>generate-resources</phase> - <goals> - <goal>generate-html</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> </build> </project> http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/docbkx/java-classes.xml ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/docbkx/java-classes.xml b/docs/docbook/getting-started/src/docbkx/java-classes.xml index 6d4bc37..8c71104 100644 --- a/docs/docbook/getting-started/src/docbkx/java-classes.xml +++ b/docs/docbook/getting-started/src/docbkx/java-classes.xml @@ -69,12 +69,12 @@ </dependency> </dependencies> </project></programlisting></para> - <para>Your computer must be connected to the internet. Once you edit the pom.xml, IDEA + <para>Your computer must be connected to the internet. Once you edit the <code>pom.xml</code>, IDEA will download the needed Cayenne jar file and add it to the project build path. As a result, all the errors should disappear.</para> <para><inlinemediaobject> <imageobject> - <imagedata fileref="images/idea-generated-classes.png" scalefit="1" width="100%"/> + <imagedata fileref="images/idea-generated-classes.png" scalefit="0" width="100%"/> </imageobject> </inlinemediaobject></para> <para>Now let's check the entity class pairs. Each one is made of a superclass (e.g. Artist) http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/docbkx/object-context.xml ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/docbkx/object-context.xml b/docs/docbook/getting-started/src/docbkx/object-context.xml index 912db2f..b859989 100644 --- a/docs/docbook/getting-started/src/docbkx/object-context.xml +++ b/docs/docbook/getting-started/src/docbkx/object-context.xml @@ -24,7 +24,7 @@ <title>Creating the Main Class</title> <itemizedlist> <listitem> - <para>In IDEA create a new class called "Main" in the "<code>org.example.cayenne</code>" + <para>In IDEA create a new class called "<code>Main</code>" in the "<code>org.example.cayenne</code>" package.</para> </listitem> <listitem> @@ -55,7 +55,7 @@ public class Main { ObjectContext context = cayenneRuntime.newContext(); } }</programlisting></para> - <para>ObjectContext is an isolated "session" in Cayenne that provides all needed API + <para><code>ObjectContext</code> is an isolated "session" in Cayenne that provides all needed API to work with data. ObjectContext has methods to execute queries and manage persistent objects. We'll discuss them in the following sections. When the first ObjectContext is created in the application, Cayenne loads XML mapping files and @@ -73,16 +73,16 @@ public class Main { jars:<programlisting language="xml"><dependency> <groupId>org.apache.derby</groupId> <artifactId>derby</artifactId> - <version>10.8.1.2</version> + <version>10.13.1.1</version> </dependency></programlisting>Now we are ready to run. Right click the "Main" class in IDEA and select "Run 'Main.main()'". In the console you'll see output similar to this, indicating that Cayenne stack has been - started:<screen>INFO: Loading XML configuration resource from file:cayenne-project.xml + started:<screen>INFO: Loading XML configuration resource from file:/.../cayenne-project.xml +INFO: Loading XML DataMap resource from file:/.../datamap.map.xml INFO: loading user name and password. -INFO: Created connection pool: jdbc:derby:memory:testdb;create=true - Driver class: org.apache.derby.jdbc.EmbeddedDriver - Min. connections in the pool: 1 - Max. connections in the pool: 1</screen> +INFO: Connecting to 'jdbc:derby:memory:testdb;create=true' as 'null' +INFO: +++ Connecting: SUCCESS. +INFO: setting DataNode 'datanode' as default, used by all unlinked DataMaps</screen> <note> <title>How to Configure Cayenne Logging</title> http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/docbkx/object-relational-mapping.xml ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/docbkx/object-relational-mapping.xml b/docs/docbook/getting-started/src/docbkx/object-relational-mapping.xml index 96e6b60..ca579aa 100644 --- a/docs/docbook/getting-started/src/docbkx/object-relational-mapping.xml +++ b/docs/docbook/getting-started/src/docbkx/object-relational-mapping.xml @@ -51,7 +51,7 @@ <imagedata fileref="images/icon-attribute.gif" scalefit="0" valign="bottom" width="100%"/> </imageobject> </inlinemediaobject> on the entity - toolbar (third button from the left). This action changes the view to the "Attribute" + toolbar. This action changes the view to the "Attribute" tab and adds a new attribute (attribute means a "table column" in this case) called "untitledAttr". Let's rename it to ID, make it an <code>INTEGER</code> and make it a PK: </para> @@ -115,7 +115,7 @@ </itemizedlist> <para><inlinemediaobject> <imageobject> - <imagedata fileref="images/modeler-dbrelationship.png" scalefit="1" width="100%"/> + <imagedata fileref="images/modeler-dbrelationship.png" scalefit="0" width="100%"/> </imageobject> </inlinemediaobject></para> <itemizedlist> http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/docbkx/persistent-objects.xml ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/docbkx/persistent-objects.xml b/docs/docbook/getting-started/src/docbkx/persistent-objects.xml index 2114835..7135640 100644 --- a/docs/docbook/getting-started/src/docbkx/persistent-objects.xml +++ b/docs/docbook/getting-started/src/docbkx/persistent-objects.xml @@ -104,11 +104,10 @@ stein.setGallery(metropolitan);</programlisting> output will show a few actual DB operations:</para> <screen>org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader load INFO: Loading XML configuration resource from file:cayenne-project.xml -... -INFO: Opening connection: jdbc:derby:memory:testdb;create=true - Login: null - Password: ******* +... +INFO: Connecting to 'jdbc:derby:memory:testdb;create=true' as 'null' INFO: +++ Connecting: SUCCESS. +INFO: setting DataNode 'datanode' as default, used by all unlinked DataMaps INFO: Detected and installed adapter: org.apache.cayenne.dba.derby.DerbyAdapter INFO: --- transaction started. INFO: No schema detected, will create mapped tables http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/docbkx/starting-project.xml ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/docbkx/starting-project.xml b/docs/docbook/getting-started/src/docbkx/starting-project.xml index 5db363f..843d960 100644 --- a/docs/docbook/getting-started/src/docbkx/starting-project.xml +++ b/docs/docbook/getting-started/src/docbkx/starting-project.xml @@ -158,7 +158,7 @@ </imageobject> </inlinemediaobject></para> <para>Note that the location of the XML files is not coincidental. Cayenne runtime looks for - "cayenne-*.xml" file in the application <code>CLASSPATH</code> and "<code>src/main/resources</code>" folder should + "<code>cayenne-*.xml</code>" file in the application <code>CLASSPATH</code> and "<code>src/main/resources</code>" folder should already be a "class folder" in IDEA for our project (and is also a standard location that Maven would copy to a jar file, if we were using Maven from command-line).</para> </section> http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/docbkx/webapp.xml ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/docbkx/webapp.xml b/docs/docbook/getting-started/src/docbkx/webapp.xml index 9452e83..2695354 100644 --- a/docs/docbook/getting-started/src/docbkx/webapp.xml +++ b/docs/docbook/getting-started/src/docbkx/webapp.xml @@ -81,20 +81,20 @@ <para>Create the artist browser page <code>src/main/webapp/index.jsp</code> file with the following contents: </para> <para><emphasis role="bold">webapp/index.jsp</emphasis> - <programlisting language="xml"><%@ page language="java" contentType="text/html" %> + <programlisting language="jsp"><%@ page language="java" contentType="text/html" %> <%@ page import="org.example.cayenne.persistent.*" %> <%@ page import="org.apache.cayenne.*" %> <%@ page import="org.apache.cayenne.query.*" %> <%@ page import="org.apache.cayenne.exp.*" %> <%@ page import="java.util.*" %> -<% - SelectQuery query = new SelectQuery(Artist.class); - query.addOrdering(Artist.NAME.getName(), SortOrder.ASCENDING); - +<% ObjectContext context = BaseContext.getThreadObjectContext(); - List<Artist> artists = context.performQuery(query); + List<Artist> artists = ObjectSelect.query(Artist.class) + .orderBy(Artist.NAME.asc()) + .select(context); %> + <html> <head> <title>Main</title> @@ -104,13 +104,13 @@ <% if(artists.isEmpty()) {%> <p>No artists found</p> - <% } else { - for(Artist a : artists) { + <% } else { + for(Artist a : artists) { %> <p><a href="detail.jsp?id=<%=Cayenne.intPKForObject(a)%>"> <%=a.getName()%> </a></p> <% - } - } %> + } + } %> <hr> <p><a href="detail.jsp">Create new artist...</a></p> </body> @@ -120,9 +120,10 @@ <para>Create the artist editor page <code>src/main/webapp/detail.jsp</code> with the following content: </para> <para><emphasis role="bold">webapp/detail.jsp</emphasis> - <programlisting language="xml"><%@ page language="java" contentType="text/html" %> + <programlisting language="jsp"><%@ page language="java" contentType="text/html" %> <%@ page import="org.example.cayenne.persistent.*" %> <%@ page import="org.apache.cayenne.*" %> +<%@ page import="org.apache.cayenne.query.*" %> <%@ page import="java.util.*" %> <%@ page import="java.text.*" %> @@ -133,7 +134,7 @@ // find artist for id Artist artist = null; if(id != null && id.trim().length() > 0) { - artist = Cayenne.objectForPK(context, Artist.class, Integer.parseInt(id)); + artist = SelectById.query(Artist.class, Integer.parseInt(id)).selectOne(context); } if("POST".equals(request.getMethod())) { @@ -206,9 +207,9 @@ <programlisting language="xml"><build> <plugins> <plugin> - <groupId>org.mortbay.jetty</groupId> + <groupId>org.eclipse.jetty</groupId> <artifactId>maven-jetty-plugin</artifactId> - <version>6.1.22</version> + <version>9.3.14.v20161028</version> </plugin> </plugins> </build></programlisting> @@ -217,7 +218,7 @@ <para>Go to "Select Run/Debug Configuration" menu, and then "Edit Configuration..."</para> <para><inlinemediaobject> <imageobject> - <imagedata fileref="images/idea-configuration-menu.png" scalefit="1" width="100%"/> + <imagedata fileref="images/idea-configuration-menu.png" scalefit="0" width="100%"/> </imageobject> </inlinemediaobject> </para> @@ -226,7 +227,7 @@ <para>Click "+" button and select "Maven". Enter "Name" and "Command line" as shown on screenshot:</para> <para><inlinemediaobject> <imageobject> - <imagedata fileref="images/idea-run-configuration.png" scalefit="1" width="100%"/> + <imagedata fileref="images/idea-run-configuration.png" scalefit="0" width="100%"/> </imageobject> </inlinemediaobject></para> </listitem> @@ -243,19 +244,20 @@ [INFO] ------------------------------------------------------------------------ ... [INFO] Configuring Jetty for project: tutorial -[INFO] Webapp source directory = /.../tutorial/src/main/webapp +[INFO] webAppSourceDirectory not set. Trying src/main/webapp [INFO] Reload Mechanic: automatic [INFO] Classes = /.../tutorial/target/classes -[INFO] Context path = /tutorial -[INFO] Tmp directory = determined at runtime -[INFO] Web defaults = org/mortbay/jetty/webapp/webdefault.xml +[INFO] Logging initialized @1617ms +[INFO] Context path = / +[INFO] Tmp directory = /.../tutorial/target/tmp +[INFO] Web defaults = org/eclipse/jetty/webapp/webdefault.xml [INFO] Web overrides = none -[INFO] web.xml file = /.../tutorial/src/main/webapp/WEB-INF/web.xml +[INFO] web.xml file = file:/.../tutorial/src/main/webapp/WEB-INF/web.xml [INFO] Webapp directory = /.../tutorial/src/main/webapp -[INFO] Starting jetty 6.1.22 ... -INFO::jetty-6.1.22 -INFO::No Transaction manager found - if your webapp requires one, please configure one. -INFO::Started SelectChannelConnector@0.0.0.0:8080 +[INFO] jetty-9.3.0.v20150612 +[INFO] Started o.e.j.m.p.JettyWebAppContext@6872f9c8{/,file:/.../tutorial/src/main/webapp/,AVAILABLE}{file:/.../tutorial/src/main/webapp/} +[INFO] Started ServerConnector@723875bc{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} +[INFO] Started @2367ms [INFO] Started Jetty Server</screen> </listitem> </itemizedlist> @@ -264,19 +266,14 @@ INFO::Started SelectChannelConnector@0.0.0.0:8080 <para>So the Jetty container just started.</para> </listitem> <listitem> - <para>Now go to <link xlink:href="http://localhost:8080/tutorial/">http://localhost:8080/tutorial/</link> + <para>Now go to <link xlink:href="http://localhost:8080/">http://localhost:8080/</link> URL. You should see "No artists found message" in the web browser and the following output in the IDEA console:</para> <screen>INFO: Loading XML configuration resource from file:/.../tutorial/target/classes/cayenne-project.xml INFO: loading user name and password. -INFO: Created connection pool: jdbc:derby:memory:testdb;create=true - Driver class: org.apache.derby.jdbc.EmbeddedDriver - Min. connections in the pool: 1 - Max. connections in the pool: 1 -INFO: Opening connection: jdbc:derby:memory:testdb;create=true - Login: null - Password: ******* +INFO: Connecting to 'jdbc:derby:memory:testdb;create=true' as 'null' INFO: +++ Connecting: SUCCESS. +INFO: setting DataNode 'datanode' as default, used by all unlinked DataMaps INFO: Detected and installed adapter: org.apache.cayenne.dba.derby.DerbyAdapter INFO: --- transaction started. INFO: No schema detected, will create mapped tables @@ -292,8 +289,8 @@ INFO: DELETE FROM AUTO_PK_SUPPORT WHERE TABLE_NAME IN ('ARTIST', 'GALLERY', 'PAI INFO: INSERT INTO AUTO_PK_SUPPORT (TABLE_NAME, NEXT_ID) VALUES ('ARTIST', 200) INFO: INSERT INTO AUTO_PK_SUPPORT (TABLE_NAME, NEXT_ID) VALUES ('GALLERY', 200) INFO: INSERT INTO AUTO_PK_SUPPORT (TABLE_NAME, NEXT_ID) VALUES ('PAINTING', 200) -INFO: SELECT t0.DATE_OF_BIRTH, t0.NAME, t0.ID FROM ARTIST t0 ORDER BY t0.NAME - prepared in 43 ms. -INFO: === returned 0 rows. - took 56 ms. +INFO: SELECT t0.DATE_OF_BIRTH, t0.NAME, t0.ID FROM ARTIST t0 ORDER BY t0.NAME +INFO: === returned 0 rows. - took 17 ms. INFO: +++ transaction committed.</screen> </listitem> </itemizedlist> @@ -303,7 +300,7 @@ INFO: +++ transaction committed.</screen> can be edited by clicking on their name:</para> <para><inlinemediaobject> <imageobject> - <imagedata fileref="images/chrome-webapp.png" scalefit="1" width="100%"/> + <imagedata fileref="images/chrome-webapp.png" width="100%"/> </imageobject> </inlinemediaobject></para> </listitem> http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/images/base-datamap.png ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/images/base-datamap.png b/docs/docbook/getting-started/src/images/base-datamap.png index 856fb36..8bf5ff6 100644 Binary files a/docs/docbook/getting-started/src/images/base-datamap.png and b/docs/docbook/getting-started/src/images/base-datamap.png differ http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/images/base-datanode.png ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/images/base-datanode.png b/docs/docbook/getting-started/src/images/base-datanode.png index 180a2d6..7c4c320 100644 Binary files a/docs/docbook/getting-started/src/images/base-datanode.png and b/docs/docbook/getting-started/src/images/base-datanode.png differ http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/images/idea-configuration-menu.png ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/images/idea-configuration-menu.png b/docs/docbook/getting-started/src/images/idea-configuration-menu.png index 4afda66..30cf05e 100644 Binary files a/docs/docbook/getting-started/src/images/idea-configuration-menu.png and b/docs/docbook/getting-started/src/images/idea-configuration-menu.png differ http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/images/idea-run-configuration.png ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/images/idea-run-configuration.png b/docs/docbook/getting-started/src/images/idea-run-configuration.png index b2e7a2d..3ebbb62 100644 Binary files a/docs/docbook/getting-started/src/images/idea-run-configuration.png and b/docs/docbook/getting-started/src/images/idea-run-configuration.png differ http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/images/modeler-artistid.png ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/images/modeler-artistid.png b/docs/docbook/getting-started/src/images/modeler-artistid.png index 27d639a..2217206 100644 Binary files a/docs/docbook/getting-started/src/images/modeler-artistid.png and b/docs/docbook/getting-started/src/images/modeler-artistid.png differ http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/images/modeler-deleterule.png ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/images/modeler-deleterule.png b/docs/docbook/getting-started/src/images/modeler-deleterule.png index 3698522..37635f3 100644 Binary files a/docs/docbook/getting-started/src/images/modeler-deleterule.png and b/docs/docbook/getting-started/src/images/modeler-deleterule.png differ http://git-wip-us.apache.org/repos/asf/cayenne/blob/bfdc4156/docs/docbook/getting-started/src/images/tutorial-idea-project.png ---------------------------------------------------------------------- diff --git a/docs/docbook/getting-started/src/images/tutorial-idea-project.png b/docs/docbook/getting-started/src/images/tutorial-idea-project.png index ca64043..058dc1d 100644 Binary files a/docs/docbook/getting-started/src/images/tutorial-idea-project.png and b/docs/docbook/getting-started/src/images/tutorial-idea-project.png differ