r1461 - in trunk/simexplorer-is: simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/random simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/entities/metadata simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/storage simexplo
Author: glandais Date: 2008-03-25 16:19:55 +0000 (Tue, 25 Mar 2008) New Revision: 1461 Modified: trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/random/ElementGenerator.java trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/entities/metadata/VersionTest.java trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/storage/VersionGenerator.java trunk/simexplorer-is/simexplorer-is-swing-generated/pom.xml trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementHistory.java Log: Version is now immuable Modified: trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/MetaData.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -138,7 +138,7 @@ if (version == null) { this.version = null; } else { - this.version = version.safeClone(); + this.version = Version.valueOf(version.toString()); } } @@ -214,7 +214,7 @@ if (parentVersion == null) { this.parentVersion = null; } else { - this.parentVersion = parentVersion.safeClone(); + this.parentVersion = Version.valueOf(parentVersion.toString()); } } Modified: trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-entities/src/java/fr/cemagref/simexplorer/is/entities/metadata/Version.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -1,24 +1,23 @@ -/* -* ##% Copyright (C) 2008 Cemagref -* -* This program is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program. If not, see <http://www.gnu.org/licenses/>. -* ##% */ +/* + * Copyright (C) 2008 Cemagref + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ package fr.cemagref.simexplorer.is.entities.metadata; import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; +import java.util.Arrays; import java.util.StringTokenizer; /** @@ -26,10 +25,10 @@ * * @author Code Lutin, Landais Gabriel, Chemit Tony */ -public class Version implements Comparable<Version>, Serializable, Cloneable { +public class Version implements Comparable<Version>, Serializable { /** Inner storage. */ - protected List<Integer> pointedVersion; + protected int[] pointedVersion; /** The Constant EMPTY_VERSION. */ private static final String EMPTY_VERSION = ""; @@ -49,19 +48,27 @@ } /** + * Instantiates a new version. + * + * @param versions the versions + */ + private Version(int[] versions) { + this.pointedVersion = versions; + } + + /** * Default constructor. * * @param version String version */ - public Version(String version) { - // Initialize list - pointedVersion = new ArrayList<Integer>(); - if (version != null) { - // tokenize on dot - StringTokenizer st = new StringTokenizer(version, "."); - while (st.hasMoreTokens()) { - addSubVersion(Integer.valueOf(st.nextToken())); - } + private Version(String version) { + // tokenize on dot + StringTokenizer st = new StringTokenizer(version, "."); + pointedVersion = new int[st.countTokens()]; + int i = 0; + while (st.hasMoreTokens()) { + pointedVersion[i] = Integer.valueOf(st.nextToken()); + i++; } } @@ -73,50 +80,44 @@ * @return the sub version number */ public Integer getVersion(int position) { - if (position < pointedVersion.size()) { - return pointedVersion.get(position); + if (position < pointedVersion.length) { + return pointedVersion[position]; } return null; } /** - * TODO, this is not immuable method :) modified internal state, also we TODO should not to this, but return a new - * instance of Version Set a sub version. + * Truncate the version to n pointed versions. * - * @param position Sub version to modify - * @param subVersion New value + * @param nVersions the number of pointed versions + * + * @return the version */ - public void setVersion(int position, Integer subVersion) { - while (getVersion(position) == null) { - addSubVersion(0); + public Version truncate(int nVersions) { + int[] newVersion = new int[nVersions]; + for (int i = 0; i < nVersions; i++) { + Integer version = getVersion(i); + if (version != null) { + newVersion[i] = version; + } else { + newVersion[i] = 0; + } } - pointedVersion.set(position, subVersion); + Version result = new Version(newVersion); + return result; } /** - * TODO as the method modified internal state, it should be at least protected Add a new sub version. + * Increment the i th pointed version. * - * @param subVersion Sub version value - */ - public void addSubVersion(Integer subVersion) { - pointedVersion.add(subVersion); - } - - /** - * Clone current instance and Increment a sub version. <p/> Note : <b>The current instance is NOT modified</b> + * @param iVersion the pointed version to increment * - * @param position Sub version position - * - * @return the new instance of version object updated + * @return the version */ - public Version incVersion(int position) { - Version result = safeClone(); - Integer oldValue = result.getVersion(position); - if (oldValue == null) { - oldValue = 0; - } - result.setVersion(position, oldValue + 1); - return result; + public Version increment(int iVersion) { + Version v = truncate(iVersion + 1); + v.pointedVersion[iVersion] = v.pointedVersion[iVersion] + 1; + return v; } /** @@ -125,7 +126,7 @@ * @return Number of subversions */ public int getLength() { - return pointedVersion.size(); + return pointedVersion.length; } /* (non-Javadoc) @@ -173,52 +174,32 @@ return result; } - /* - * TODO suppress it if we want a immuable class + /* (non-Javadoc) + * @see java.lang.Object#hashCode() */ @Override - public Version clone() throws CloneNotSupportedException { - Version version = (Version) super.clone(); - // must defined a new instance of list(otherwise it will use the same - // instance than the original Version instance, and we don not want this - version.pointedVersion = new ArrayList<Integer>(pointedVersion); - return version; + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + Arrays.hashCode(pointedVersion); + return result; } - /* - * TODO when the class will be immuable, we can use super method, since - * TODO a reference of Version will be unqiue :) - * (non-Javadoc) + /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override - public boolean equals(Object o) { - return this == o || (o instanceof Version && pointedVersion.equals(((Version) o).pointedVersion)); + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + final Version other = (Version) obj; + if (!Arrays.equals(pointedVersion, other.pointedVersion)) + return false; + return true; } - /* - * TODO when the class will be immuable, we can use super method, since - * TODO a reference of Version will be unqiue :) - * (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() { - return pointedVersion.hashCode(); - } - - /** - * TODO suppress it if we want a immuable class Safe clone. - * - * @return the version - * - * @throws RuntimeException the runtime exception - */ - public Version safeClone() throws RuntimeException { - try { - return clone(); - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); - } - } } \ No newline at end of file Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceClient.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -92,19 +92,7 @@ */ @Override protected Version incrementVersion(Version version) { - Version result = new Version(""); - Integer version0 = version.getVersion(0); - if (version0 == null) { - result.setVersion(0, 0); - } else { - result.setVersion(0, version0); - } - Integer version1 = version.getVersion(0); - if (version1 == null) { - result.setVersion(1, 1); - } else { - result.setVersion(1, version1 + 1); - } + Version result = version.increment(1); return result; } Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceCommon.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -128,7 +128,7 @@ */ @Override public MetaData[] getMetadatasUsing(String token, String uuid, String version) throws SimExplorerException { - return getStorageEngine().getMetadatasUsing(token, uuid, new Version(version)); + return getStorageEngine().getMetadatasUsing(token, uuid, Version.valueOf(version)); } /* (non-Javadoc) @@ -711,12 +711,7 @@ if (getStorageEngine().canCreateSubVersion(token, metaData.getUuid())) { // trying to save a version with same hash but in superior version // so we will copy versionToUpgrade to metaData.getVersion() - Version versionToUpgrade; - try { - versionToUpgrade = previousVersion.getVersion().clone(); - } catch (CloneNotSupportedException e) { - throw new SimExplorerTechnicalException(e); - } + Version versionToUpgrade = Version.valueOf(previousVersion.toString()); // set previous as not being the latest one update(token, previousVersion.getUuid(), previousVersion.getVersion(), null, true); Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/StorageServiceServer.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -68,13 +68,7 @@ @Override protected Version incrementVersion(Version version) { - Version result = new Version(""); - Integer version0 = version.getVersion(0); - if (version0 == null) { - result.setVersion(0, 1); - } else { - result.setVersion(0, version0 + 1); - } + Version result = version.increment(0); return result; } Modified: trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/random/ElementGenerator.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/random/ElementGenerator.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-service/src/java/fr/cemagref/simexplorer/is/service/random/ElementGenerator.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -175,12 +175,15 @@ } element.setDescription(sb.toString()); - Version v = new Version("0"); + StringBuffer version = new StringBuffer(); for (int i = 0, max = 2 + r.nextInt(2); i < max; i++) { - v.setVersion(i, r.nextInt(5)); + if (i != 0) { + version.append("."); + } + version.append(r.nextInt(5)); } - metaData.setVersion(v.toString()); + metaData.setVersion(version.toString()); metaData.setCreationDate(new Date()); metaData.setHash(shortString()); metaData.setLatest(true); Modified: trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-storage/src/java/fr/cemagref/simexplorer/is/storage/database/lucene/LuceneDatabase.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -531,7 +531,7 @@ if (hits != null) { for (int i = 0; i < hits.length(); i++) { Document doc = hits.doc(i); - versions.add(new Version(doc.get(KEY_VERSION))); + versions.add(Version.valueOf(doc.get(KEY_VERSION))); } } } finally { Modified: trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/entities/metadata/VersionTest.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/entities/metadata/VersionTest.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/entities/metadata/VersionTest.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -112,15 +112,15 @@ public void testIncSubVersion() throws Exception { v0 = Version.valueOf("0.1"); - v1 = v0.incVersion(0); + v1 = v0.increment(0); assertEquals(Version.valueOf("0.1"), v0); - assertEquals(Version.valueOf("1.1"), v1); + assertEquals(Version.valueOf("1"), v1); - v1 = v0.incVersion(1); + v1 = v0.increment(1); assertEquals(Version.valueOf("0.1"), v0); assertEquals(Version.valueOf("0.2"), v1); - v1 = v0.incVersion(2); + v1 = v0.increment(2); assertEquals(Version.valueOf("0.1"), v0); assertEquals(Version.valueOf("0.1.1"), v1); } Modified: trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/storage/VersionGenerator.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/storage/VersionGenerator.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-storage/src/test/fr/cemagref/simexplorer/is/storage/VersionGenerator.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -117,7 +117,7 @@ // System.out.println("nb versions :" + nb); // System.out.println("version 0 :" + result[0]); for (int i = 1; i < nb; i++) { - result[i] = result[i - 1].incVersion(generateAbsInt(MAX_SIZE)); + result[i] = result[i - 1].increment(generateAbsInt(MAX_SIZE)); // System.out.println("version " + i + " :" + result[i]); } return result; Modified: trunk/simexplorer-is/simexplorer-is-swing-generated/pom.xml =================================================================== --- trunk/simexplorer-is/simexplorer-is-swing-generated/pom.xml 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-swing-generated/pom.xml 2008-03-25 16:19:55 UTC (rev 1461) @@ -110,6 +110,7 @@ <dependency> <groupId>lutinlib</groupId> <artifactId>lutinwidget</artifactId> + <version>0.10-SNAPSHOT</version> </dependency> </dependencies> </plugin> Modified: trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementHistory.java =================================================================== --- trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementHistory.java 2008-03-25 14:32:43 UTC (rev 1460) +++ trunk/simexplorer-is/simexplorer-is-web/src/java/fr/cemagref/simexplorer/is/ui/web/pages/ElementHistory.java 2008-03-25 16:19:55 UTC (rev 1461) @@ -31,6 +31,7 @@ /** * The Class ElementHistory. + * * @author Code Lutin, Landais Gabriel, Chemit Tony */ public class ElementHistory extends ElementPageDetail { @@ -96,7 +97,7 @@ TreeNode rootNode = new TreeNode(); rootNode.setType(TreeNode.TYPE_FOLDER); rootNode.setColumns(generateStringArray(getMessages().get("simexplorer.ui.web.history"))); - rootNode.setObject(new Version("")); + rootNode.setObject(Version.valueOf("")); rootNode.setChildren(new ArrayList<TreeNode>()); for (Version version : versions) { insertNode(version, 0, rootNode); @@ -161,10 +162,7 @@ * @return the version */ private Version generateVersion(Version version, int pos) { - Version v = new Version(""); - for (int i = 0; i <= pos; i++) { - v.setVersion(i, version.getVersion(i)); - } + Version v = version.truncate(pos + 1); return v; }
participants (1)
-
glandais@users.labs.libre-entreprise.org