You are viewing a plain text version of this content. The canonical link for it is here.
Posted to torque-dev@db.apache.org by tf...@apache.org on 2013/10/07 09:35:52 UTC
svn commit: r1529777 - in /db/torque/torque4/trunk/torque-generator/src:
main/java/org/apache/torque/generator/configuration/
main/java/org/apache/torque/generator/control/
test/java/org/apache/torque/generator/control/
Author: tfischer
Date: Mon Oct 7 07:35:51 2013
New Revision: 1529777
URL: http://svn.apache.org/r1529777
Log:
TORQUE-292 use single file for checksums
Added:
db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Checksums.java
db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/ChecksumsTest.java
Modified:
db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfiguration.java
db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfigurationReader.java
db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Controller.java
db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/ControllerState.java
db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/PropertyToJavaGenerationTest.java
Modified: db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfiguration.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfiguration.java?rev=1529777&r1=1529776&r2=1529777&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfiguration.java (original)
+++ db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfiguration.java Mon Oct 7 07:35:51 2013
@@ -106,6 +106,12 @@ public class UnitConfiguration
private boolean runOnlyOnSourceChange = false;
/**
+ * The name of the template set. Is determined from the packaging
+ * and the location of the control file.
+ */
+ private String templateSetName;
+
+ /**
* Returns the configuration of the outlets in this generation unit.
*
* @return the outlet configuration, not null.
@@ -583,6 +589,26 @@ public class UnitConfiguration
}
/**
+ * Returns the name of the template set.
+ *
+ * @return the name of the template set.
+ */
+ public String getTemplateSetName()
+ {
+ return templateSetName;
+ }
+
+ /**
+ * Sets the name of the template set.
+ *
+ * @param name the name of the template set.
+ */
+ public void setTemplateSetName(final String name)
+ {
+ this.templateSetName = name;
+ }
+
+ /**
* Checks whether the unit configuration is fully initialized.
*
* @return true if the unit configuration is fully initialized,
@@ -597,7 +623,8 @@ public class UnitConfiguration
|| loglevel == null
|| configurationHandlers == null
|| entityReferences == null
- || !overrideSourceProviderInitialized)
+ || !overrideSourceProviderInitialized
+ || templateSetName == null)
{
return false;
}
@@ -618,6 +645,8 @@ public class UnitConfiguration
.append(outputDirectoryMap)
.append(", loglevel=")
.append(loglevel)
+ .append(", name=")
+ .append(templateSetName)
.append(")");
return result.toString();
}
Modified: db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfigurationReader.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfigurationReader.java?rev=1529777&r1=1529776&r2=1529777&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfigurationReader.java (original)
+++ db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/configuration/UnitConfigurationReader.java Mon Oct 7 07:35:51 2013
@@ -100,6 +100,20 @@ class UnitConfigurationReader
unitConfiguration.setClassLoader(unitDescriptor.getClassLoader());
unitConfiguration.setRunOnlyOnSourceChange(
unitDescriptor.isRunOnlyOnSourceChange());
+ StringBuilder name = new StringBuilder()
+ .append(unitDescriptor.getPackaging().toString())
+ .append(":");
+ if (unitDescriptor.getProjectPaths().getConfigurationPackage() != null)
+ {
+ name.append(
+ unitDescriptor.getProjectPaths().getConfigurationPackage());
+ }
+ else
+ {
+ name.append(
+ unitDescriptor.getProjectPaths().getConfigurationPath());
+ }
+ unitConfiguration.setTemplateSetName(name.toString());
ConfigurationProvider configurationProvider
= createConfigurationProvider(unitDescriptor);
Added: db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Checksums.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Checksums.java?rev=1529777&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Checksums.java (added)
+++ db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Checksums.java Mon Oct 7 07:35:51 2013
@@ -0,0 +1,259 @@
+package org.apache.torque.generator.control;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.NoSuchElementException;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
+
+/**
+ * Stores Checksums and dates of the checksums, keyed by a String.
+ * @version $Id: $
+ *
+ */
+public class Checksums
+{
+ /** Array containing the 16 hex characters. */
+ private static final char[] HEX_ARRAY = "0123456789ABCDEF".toCharArray();
+
+ /** The file encoding for the lastChanges file. */
+ private static final String FILE_ENCODING = "ISO-8859-1";
+
+ /** The '0' character as byte. */
+ private static final byte ZERO_LITERAL_AS_BYTE = (byte) '0';
+
+ /** The '9' character as byte. */
+ private static final byte NINE_LITERAL_AS_BYTE = (byte) '9';
+
+ /** The base for characters > 9 in a hex string. */
+ private static final byte CHAR_BASE = (byte) 55;
+
+ /** Bits per character of a hexadecimal number. */
+ private static final int HEX_BITS_PER_CHAR = 4;
+
+ /** The largest hex two character number. */
+ private static final int HEX_SMALLEST_TWOCHAR_NUMBER = 0x10;
+
+ /** The smallest hex one character number. */
+ private static final int HEX_LARGEST_ONECHAR_NUMBER = 0x0F;
+
+ /** The largest hex two character number. */
+ private static final int HEX_LARGEST_TWOCHAR_NUMBER = 0xFF;
+
+ /** The separator between tokens in the written file. */
+ private static final String SEPARATOR = "-";
+
+ /** The checksums, keyed by the name of the checked entity. */
+ private final Map<String, byte[]> checksums
+ = new HashMap<String, byte[]>();
+
+ /** The modification dates, keyed by the name of the checked entity. */
+ private final Map<String, Date> modificationDates
+ = new HashMap<String, Date>();
+
+ public byte[] getChecksum(final String name)
+ {
+ return checksums.get(name);
+ }
+
+ public Checksums setChecksum(
+ final String name,
+ final byte[] checksum)
+ {
+ if (checksum == null)
+ {
+ throw new NullPointerException("checksum must not be null");
+ }
+ checksums.put(name, checksum);
+ return this;
+ }
+
+ public Map<String, byte[]> getChecksums()
+ {
+ return Collections.unmodifiableMap(checksums);
+ }
+
+ public Date getModificationDate(final String name)
+ {
+ return modificationDates.get(name);
+ }
+
+ public Checksums setModificationDate(
+ final String name,
+ final Date modificationDate)
+ {
+ if (modificationDate == null)
+ {
+ throw new NullPointerException("modificationDate must not be null");
+ }
+ modificationDates.put(name, modificationDate);
+ return this;
+ }
+
+ public Map<String, Date> getModificationDates()
+ {
+ return Collections.unmodifiableMap(modificationDates);
+ }
+
+ public Checksums writeToFile(final File toWriteTo)
+ throws IOException
+ {
+ Set<String> keys = new HashSet<String>();
+ keys.addAll(checksums.keySet());
+ keys.addAll(modificationDates.keySet());
+ StringBuilder content = new StringBuilder();
+ for (String key : keys)
+ {
+ Date modificationDate = modificationDates.get(key);
+ if (modificationDate != null)
+ {
+ content.append(modificationDate.getTime());
+ }
+ content.append(SEPARATOR);
+ byte[] checksum = checksums.get(key);
+ if (checksum != null)
+ {
+ for (int j = 0; j < checksum.length; j++)
+ {
+ int v = checksum[j] & HEX_LARGEST_TWOCHAR_NUMBER;
+ content.append(HEX_ARRAY[v >>> HEX_BITS_PER_CHAR])
+ .append(HEX_ARRAY[v & HEX_LARGEST_ONECHAR_NUMBER]);
+ }
+ }
+ content.append(SEPARATOR).append(key).append("\n");
+ }
+ FileUtils.writeStringToFile(
+ toWriteTo,
+ content.toString(),
+ FILE_ENCODING);
+ return this;
+ }
+
+ public Checksums readFromFile(final File toReadFrom)
+ throws IOException
+ {
+ checksums.clear();
+ modificationDates.clear();
+
+ if (!toReadFrom.exists())
+ {
+ // nothing to read
+ return this;
+ }
+
+ String content = FileUtils.readFileToString(
+ toReadFrom,
+ FILE_ENCODING);
+ for (String line : StringUtils.split(content, "\n"))
+ {
+ if (StringUtils.isBlank(line))
+ {
+ continue;
+ }
+ StringTokenizer tokenizer = new StringTokenizer(
+ line,
+ SEPARATOR,
+ true);
+
+ String datestring;
+ String checksumString;
+ String name;
+ try
+ {
+ datestring = tokenizer.nextToken();
+ if (SEPARATOR.equals(datestring))
+ {
+ datestring = null;
+ }
+ else if (!(SEPARATOR.equals(tokenizer.nextToken())))
+ {
+ throw new IOException("invalid line (no separator after date)"
+ + line);
+ }
+
+ checksumString = tokenizer.nextToken();
+ if (SEPARATOR.equals(checksumString))
+ {
+ checksumString = null;
+ }
+ else if (!(SEPARATOR.equals(tokenizer.nextToken())))
+ {
+ throw new IOException("invalid line (no separator after checksum)"
+ + line);
+ }
+ name = tokenizer.nextToken("");
+ }
+ catch (NoSuchElementException e)
+ {
+ throw new IOException("invalid line (not enough separators)"
+ + line);
+ }
+
+ if (datestring != null)
+ {
+ Date modificationDate = new Date(Long.parseLong(datestring));
+ modificationDates.put(name, modificationDate);
+ }
+ if (checksumString != null)
+ {
+ byte[] checksum = new byte[checksumString.length() / 2];
+ boolean last = false;
+ int currentByte = 0;
+ int i = 0;
+ for (char hexValue : checksumString.toCharArray())
+ {
+ byte read;
+ if (hexValue > NINE_LITERAL_AS_BYTE)
+ {
+ read = (byte) (hexValue - CHAR_BASE);
+ }
+ else
+ {
+ read = (byte) (hexValue - ZERO_LITERAL_AS_BYTE);
+ }
+ if (!last)
+ {
+ currentByte = HEX_SMALLEST_TWOCHAR_NUMBER * read;
+ last = true;
+ }
+ else
+ {
+ currentByte = currentByte + read;
+ checksum[i] = (byte) currentByte;
+ i++;
+ last = false;
+ }
+ }
+ checksums.put(name, checksum);
+ }
+ }
+ return this;
+ }
+}
Modified: db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Controller.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Controller.java?rev=1529777&r1=1529776&r2=1529777&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Controller.java (original)
+++ db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/Controller.java Mon Oct 7 07:35:51 2013
@@ -33,7 +33,6 @@ import java.util.List;
import java.util.Map;
import java.util.Properties;
-import org.apache.commons.io.FileUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;
@@ -71,14 +70,11 @@ public class Controller
private static Log log = LogFactory.getLog(Controller.class);
/**
- * The subdirectory in the work directory where last source changes
+ * The file in the work directory where last source changes
* are stored.
*/
- public static final String LAST_SOURCE_CHANGE_CACHE_SUBDIR
- = "last-source-changes";
-
- /** The suffix for written checksum files. */
- public static final String CHECKSUM_SUFFIX = ".checksum";
+ public static final String LAST_SOURCE_CHANGE_CACHE_FILE
+ = "last-source-changes.checksums";
/** The content of checksum files if no checksum can be computed. */
public static final String NO_CHECKSUM_CONTENT
@@ -112,8 +108,8 @@ public class Controller
* The key is the absolute path to the source file, the value the result
* of the sourceModified check.
*/
- private final Map<String,Boolean> sourceModifiedCache
- = new HashMap<String,Boolean>();
+ private final Map<String, Boolean> sourceModifiedCache
+ = new HashMap<String, Boolean>();
/**
* Executes the controller action.
@@ -207,6 +203,25 @@ public class Controller
unitConfiguration.getLoglevel().apply();
log.debug("processGenerationUnit() : Loglevel applied.");
controllerState.setUnitConfiguration(unitConfiguration);
+
+ File sourceChecksumsFile = new File(
+ unitConfiguration.getCacheDirectory(),
+ LAST_SOURCE_CHANGE_CACHE_FILE);
+ if (unitConfiguration.isRunOnlyOnSourceChange())
+ {
+ try
+ {
+ controllerState.getLastGeneratedSourceChecksums().readFromFile(
+ sourceChecksumsFile);
+ }
+ catch (IOException e)
+ {
+ throw new GeneratorException("could not read "
+ + "LastSourceChange checksum file"
+ + sourceChecksumsFile.getAbsolutePath(),
+ e);
+ }
+ }
final List<Output> outputList = unitConfiguration.getOutputList();
for (final Output output : outputList)
{
@@ -215,6 +230,21 @@ public class Controller
controllerState,
unitConfiguration);
}
+ if (unitConfiguration.isRunOnlyOnSourceChange())
+ {
+ try
+ {
+ controllerState.getThisGenerationSourceChecksums().writeToFile(
+ sourceChecksumsFile);
+ }
+ catch (IOException e)
+ {
+ throw new GeneratorException("could not write "
+ + "LastSourceChange checksum file"
+ + sourceChecksumsFile.getAbsolutePath(),
+ e);
+ }
+ }
}
/**
@@ -258,17 +288,13 @@ public class Controller
{
final Source source = sourceProvider.next();
if (!unitConfiguration.isRunOnlyOnSourceChange()
- || checkSourceModified(source, unitConfiguration))
+ || checkSourceModified(source, controllerState, unitConfiguration))
{
processSourceInOutput(
source,
output,
controllerState,
unitConfiguration);
- if (unitConfiguration.isRunOnlyOnSourceChange())
- {
- writeLastModified(source, unitConfiguration);
- }
}
}
controllerState.setSourceProvider(null);
@@ -627,6 +653,7 @@ public class Controller
*/
private boolean checkSourceModified(
final Source source,
+ final ControllerState controllerState,
final UnitConfiguration unitConfiguration)
{
File sourceFile = source.getSourceFile();
@@ -636,10 +663,12 @@ public class Controller
+ "source file cannot be determined, return true");
return true;
}
- String absoluteSourcePath = sourceFile.getAbsolutePath();
- if (sourceModifiedCache.get(absoluteSourcePath) != null)
+ String sourceChangeKey = getSourceChangeKey(
+ unitConfiguration,
+ sourceFile);
+ if (sourceModifiedCache.get(sourceChangeKey) != null)
{
- return sourceModifiedCache.get(absoluteSourcePath);
+ return sourceModifiedCache.get(sourceChangeKey);
}
Date sourceLastModified = source.getLastModified();
@@ -648,121 +677,60 @@ public class Controller
log.debug("checkSourceModified(): "
+ "lastModified date of source cannot be determined, "
+ "return true");
- sourceModifiedCache.put(absoluteSourcePath, true);
+ sourceModifiedCache.put(sourceChangeKey, true);
return true;
}
- File lastChangesDir = new File(
- unitConfiguration.getCacheDirectory(),
- LAST_SOURCE_CHANGE_CACHE_SUBDIR);
- File lastChangesFile = new File(
- lastChangesDir,
- sourceFile.getName() + CHECKSUM_SUFFIX);
- if (!lastChangesFile.exists())
+ controllerState.getThisGenerationSourceChecksums().setModificationDate(
+ sourceChangeKey, sourceLastModified);
+
+ byte[] sourceChecksum = source.getContentChecksum();
+ controllerState.getThisGenerationSourceChecksums().setChecksum(
+ sourceChangeKey, sourceChecksum);
+
+ Date lastGenerationTime
+ = controllerState.getLastGeneratedSourceChecksums()
+ .getModificationDate(sourceChangeKey);
+ if (lastGenerationTime == null)
{
log.debug("checkSourceModified(): "
- + "lastChanges file does not exist, return true");
- sourceModifiedCache.put(absoluteSourcePath, true);
+ + "lastGenerationTime does not exist, return true");
+ sourceModifiedCache.put(sourceChangeKey, true);
return true;
}
- if (lastChangesFile.lastModified() < sourceLastModified.getTime())
+ if (lastGenerationTime.before(sourceLastModified))
{
log.debug("checkSourceModified(): "
- + "lastChanges file was last changed before source ("
- + new Date(lastChangesDir.lastModified())
+ + "lastGenerationTime was before source was modified ("
+ + lastGenerationTime
+ " < "
+ sourceLastModified
+ "), return true");
- sourceModifiedCache.put(absoluteSourcePath, true);
+ sourceModifiedCache.put(sourceChangeKey, true);
return true;
}
- byte[] lastChangesContent = null;
- try
- {
- lastChangesContent = FileUtils.readFileToByteArray(lastChangesFile);
- }
- catch (IOException e)
- {
- log.warn("checkSourceModified(): "
- + "could not access File "
- + lastChangesFile.getAbsolutePath()
- + ", return true");
- sourceModifiedCache.put(absoluteSourcePath, true);
- return true;
- }
- if (!Arrays.equals(lastChangesContent, source.getContentChecksum()))
+ byte[] lastGeneratedChecksum
+ = controllerState.getLastGeneratedSourceChecksums()
+ .getChecksum(sourceChangeKey);
+ if (!Arrays.equals(lastGeneratedChecksum, sourceChecksum))
{
log.debug("checkSourceModified(): "
+ " different checksum, return true");
- sourceModifiedCache.put(absoluteSourcePath, true);
+ sourceModifiedCache.put(sourceChangeKey, true);
return true;
}
log.debug("checkSourceModified() : returning false");
- sourceModifiedCache.put(absoluteSourcePath, false);
+ sourceModifiedCache.put(sourceChangeKey, false);
return false;
}
- /**
- * Writes the last modification time of a source to the work directory.
- *
- * @param source the source which modification time should be written,
- * not null.
- * @param unitConfigurationthe configuration of the unit of generation,
- * not null.
- */
- private void writeLastModified(
- final Source source,
- final UnitConfiguration unitConfiguration)
+ private String getSourceChangeKey(
+ final UnitConfiguration unitConfiguration, final File sourceFile)
{
- File sourceFile = source.getSourceFile();
- if (sourceFile == null)
- {
- log.debug("writeLastModified(): "
- + "source file cannot be determined, do nothing");
- return;
- }
- File lastChangesDir = new File(
- unitConfiguration.getCacheDirectory(),
- LAST_SOURCE_CHANGE_CACHE_SUBDIR);
- if (!lastChangesDir.exists())
- {
- boolean dirCreationSuccessfull = lastChangesDir.mkdirs();
- if (!dirCreationSuccessfull)
- {
- log.warn("could not create directory(): "
- + lastChangesDir.getAbsolutePath()
- + ", do nothing");
- return;
- }
- }
- File lastChangesFile = new File(
- lastChangesDir,
- sourceFile.getName() + CHECKSUM_SUFFIX);
- byte[] contentChecksum = source.getContentChecksum();
- try
- {
- if (contentChecksum != null)
- {
- FileUtils.writeByteArrayToFile(
- lastChangesFile,
- source.getContentChecksum());
- }
- else
- {
- FileUtils.writeStringToFile(
- lastChangesFile,
- NO_CHECKSUM_CONTENT,
- "ISO-8859-1");
- log.debug("writeLastModified(): "
- + "checksum written to file "
- + lastChangesFile.getAbsolutePath());
- }
- }
- catch (IOException e)
- {
- log.warn("could not write to file(): "
- + lastChangesFile,
- e);
- return;
- }
+ String sourceChangeCacheKey
+ = unitConfiguration.getTemplateSetName()
+ + ":"
+ + sourceFile.getAbsolutePath();
+ return sourceChangeCacheKey;
}
+
}
Modified: db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/ControllerState.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/ControllerState.java?rev=1529777&r1=1529776&r2=1529777&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/ControllerState.java (original)
+++ db/torque/torque4/trunk/torque-generator/src/main/java/org/apache/torque/generator/control/ControllerState.java Mon Oct 7 07:35:51 2013
@@ -102,6 +102,20 @@ public class ControllerState
private Namespace outletNamespace;
/**
+ * The checksums of the source files for the last generation run,
+ * not null.
+ */
+ private final Checksums lastGeneratedSourceChecksums
+ = new Checksums();
+
+ /**
+ * The checksums of the source files for this generation run,
+ * not null.
+ */
+ private final Checksums thisGenerationSourceChecksums
+ = new Checksums();
+
+ /**
* Returns the source provider which is currently in use.
*
* @return the current source provider.
@@ -116,7 +130,7 @@ public class ControllerState
*
* @param sourceProvider the current source provider.
*/
- public void setSourceProvider(SourceProvider sourceProvider)
+ public void setSourceProvider(final SourceProvider sourceProvider)
{
this.sourceProvider = sourceProvider;
}
@@ -137,7 +151,7 @@ public class ControllerState
*
* @param output the output which is currently processed.
*/
- void setOutput(Output output)
+ void setOutput(final Output output)
{
this.output = output;
}
@@ -163,7 +177,7 @@ public class ControllerState
* @param outlet the outlet to be added to the stack of outlets,
* not null.
*/
- public void pushOutlet(Outlet outlet)
+ public void pushOutlet(final Outlet outlet)
{
if (outlet == null)
{
@@ -201,7 +215,7 @@ public class ControllerState
* @param sourceElement the new current source model object, or null
* to remove the current source mdoel object.
*/
- public void setModel(Object model)
+ public void setModel(final Object model)
{
this.model = model;
}
@@ -223,7 +237,7 @@ public class ControllerState
* @param modelRoot the the root object of the current source,
* or null to remove the current root object.
*/
- public void setModelRoot(Object modelRoot)
+ public void setModelRoot(final Object modelRoot)
{
this.modelRoot = modelRoot;
}
@@ -246,7 +260,7 @@ public class ControllerState
* (i.e. the outlet which produces the whole content),
* or null to remove the reference.
*/
- void setRootOutletReference(OutletReference rootOutletReference)
+ void setRootOutletReference(final OutletReference rootOutletReference)
{
this.rootOutletReference = rootOutletReference;
}
@@ -258,7 +272,7 @@ public class ControllerState
* @param namespace the namespace of the outlet which is currently
* active, or null to remove the name space.
*/
- void setOutletNamespace(Namespace namespace)
+ void setOutletNamespace(final Namespace namespace)
{
outletNamespace = namespace;
}
@@ -284,7 +298,7 @@ public class ControllerState
* @return The value of the option, or null if no option with that name
* is visible from the given namespace.
*/
- public Object getOption(String name)
+ public Object getOption(final String name)
{
Options options = unitConfiguration.getOptions();
QualifiedName qualifiedName = getQualifiedName(name);
@@ -310,7 +324,7 @@ public class ControllerState
*
* @throws NullPointerException if optionName is null.
*/
- public Object getOption(OptionName optionName)
+ public Object getOption(final OptionName optionName)
{
return getOption(optionName.getName());
}
@@ -325,7 +339,7 @@ public class ControllerState
* @return The value of the option as boolean, or false if no option
* with that name is visible from the given namespace,
*/
- public boolean getBooleanOption(String name)
+ public boolean getBooleanOption(final String name)
{
Object option = getOption(name);
if (option == null)
@@ -349,7 +363,7 @@ public class ControllerState
*
* @throws NullPointerExeption if optionName is null.
*/
- public boolean getBooleanOption(OptionName optionName)
+ public boolean getBooleanOption(final OptionName optionName)
{
return getBooleanOption(optionName.getName());
}
@@ -364,7 +378,7 @@ public class ControllerState
* @return The value of the option as boolean, or false if no option
* with that name is visible from the given namespace,
*/
- public String getStringOption(String name)
+ public String getStringOption(final String name)
{
Object option = getOption(name);
if (option == null)
@@ -387,7 +401,7 @@ public class ControllerState
*
* @throws NullPointerExeption if optionName is null.
*/
- public String getStringOption(OptionName optionName)
+ public String getStringOption(final OptionName optionName)
{
return getStringOption(optionName.getName());
}
@@ -424,7 +438,7 @@ public class ControllerState
* @throws NullPointerException if name is null
* @throws IllegalArgumentException if name is no valid qualifiedName.
*/
- public QualifiedName getQualifiedName(String name)
+ public QualifiedName getQualifiedName(final String name)
{
QualifiedName qualifiedName = new QualifiedName(
name,
@@ -450,7 +464,7 @@ public class ControllerState
* @param outputFilePath the currently generated file, or null to remove
* the current output file.
*/
- void setOutputFile(File outputFilePath)
+ void setOutputFile(final File outputFilePath)
{
this.outputFile = outputFilePath;
}
@@ -474,7 +488,7 @@ public class ControllerState
* @param sourceFile the current source file, or null to remove the
* source file.
*/
- public void setSourceFile(File sourceFile)
+ public void setSourceFile(final File sourceFile)
{
this.sourceFile = sourceFile;
}
@@ -496,11 +510,31 @@ public class ControllerState
* @param unitConfiguration the configuration of the currently processed
* generation unit.
*/
- public void setUnitConfiguration(UnitConfiguration unitConfiguration)
+ public void setUnitConfiguration(final UnitConfiguration unitConfiguration)
{
this.unitConfiguration = unitConfiguration;
}
+ /**
+ * Returns the checksums of the source files for the last generation run.
+ *
+ * @return the checksums, not null.
+ */
+ public Checksums getLastGeneratedSourceChecksums()
+ {
+ return lastGeneratedSourceChecksums;
+ }
+
+ /**
+ * Returns the checksums of the source files for this generation run.
+ *
+ * @return the checksums, not null.
+ */
+ public Checksums getThisGenerationSourceChecksums()
+ {
+ return thisGenerationSourceChecksums;
+ }
+
@Override
public String toString()
{
Added: db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/ChecksumsTest.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/ChecksumsTest.java?rev=1529777&view=auto
==============================================================================
--- db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/ChecksumsTest.java (added)
+++ db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/ChecksumsTest.java Mon Oct 7 07:35:51 2013
@@ -0,0 +1,143 @@
+package org.apache.torque.generator.control;
+
+/*
+ * 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.
+ */
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.torque.generator.BaseTest;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests the class LastChangesContent.
+ *
+ * @version $Id: $
+ */
+public class ChecksumsTest extends BaseTest
+{
+ private static final File CHECKSUM_DIR
+ = new File("target/test/lastChangesContent");
+
+ private static final File CHECKSUM_FILE
+ = new File(CHECKSUM_DIR, "checksum");
+
+ @Before
+ public void cleanUp()
+ {
+ if (CHECKSUM_FILE.exists())
+ {
+ CHECKSUM_FILE.delete();
+ }
+ if (CHECKSUM_DIR.exists())
+ {
+ CHECKSUM_DIR.delete();
+ }
+ }
+
+ @Test
+ public void testWriteToFile() throws Exception
+ {
+ // prepare
+ Checksums lastChangesContent = new Checksums();
+ lastChangesContent.setChecksum(
+ "name",
+ new byte[] {0, 100, -100, 1, -1});
+ lastChangesContent.setChecksum(
+ "nameChecksumOnly",
+ new byte[] {127});
+ lastChangesContent.setModificationDate(
+ "name",
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(
+ "2000-01-01 17:13:16"));
+ lastChangesContent.setModificationDate(
+ "name - ModDateOnly",
+ new Date(12345L));
+ assertFalse(CHECKSUM_DIR.exists());
+ assertFalse(CHECKSUM_FILE.exists());
+
+ // execute
+ lastChangesContent.writeToFile(CHECKSUM_FILE);
+
+ // verify
+ assertTrue(CHECKSUM_FILE.exists());
+ String fileContent = FileUtils.readFileToString(
+ CHECKSUM_FILE,
+ "ISO-8859-1");
+ // order of lines not fixed, therefore check substrings.
+ // expected is
+ // "12345--nameModDateOnly\n"
+ // + "946743196000-00649C01FF-name\n"
+ // + "-7F-nameChecksumOnly"
+ // where line order may be changed.
+ String expectedLine1 = "946743196000-00649C01FF-name\n";
+ String expectedLine2 = "-7F-nameChecksumOnly\n";
+ String expectedLine3 = "12345--name - ModDateOnly\n";
+ assertEquals(expectedLine1.length()
+ + expectedLine2.length()
+ + expectedLine3.length(),
+ fileContent.length());
+ assertTrue(fileContent.contains(expectedLine1));
+ assertTrue(fileContent.contains(expectedLine2));
+ assertTrue(fileContent.contains(expectedLine3));
+ }
+
+ @Test
+ public void testReadFromFile() throws Exception
+ {
+ // prepare
+ Checksums lastChangesContent = new Checksums();
+ FileUtils.writeStringToFile(
+ CHECKSUM_FILE,
+ "946743196000-00649C01FF-name\n"
+ + "-7F-nameChecksumOnly\n"
+ +"12345--name - ModDateOnly\n",
+ "ISO-8859-1");
+ // check that existing entries are cleared
+ lastChangesContent.setChecksum("a", new byte[] {1});
+ lastChangesContent.setModificationDate("b", new Date());
+
+ // execute
+ lastChangesContent.readFromFile(CHECKSUM_FILE);
+
+ // verify
+ assertEquals(2, lastChangesContent.getChecksums().size());
+ assertArrayEquals(
+ new byte[] {0, 100, -100, 1, -1},
+ lastChangesContent.getChecksum("name"));
+ assertArrayEquals(
+ new byte[] {127},
+ lastChangesContent.getChecksum("nameChecksumOnly"));
+ assertEquals(
+ new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(
+ "2000-01-01 17:13:16"),
+ lastChangesContent.getModificationDate("name"));
+ assertEquals(
+ new Date(12345L),
+ lastChangesContent.getModificationDate("name - ModDateOnly"));
+ }
+}
Modified: db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/PropertyToJavaGenerationTest.java
URL: http://svn.apache.org/viewvc/db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/PropertyToJavaGenerationTest.java?rev=1529777&r1=1529776&r2=1529777&view=diff
==============================================================================
--- db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/PropertyToJavaGenerationTest.java (original)
+++ db/torque/torque4/trunk/torque-generator/src/test/java/org/apache/torque/generator/control/PropertyToJavaGenerationTest.java Mon Oct 7 07:35:51 2013
@@ -29,6 +29,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.commons.io.FileUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.torque.generator.BaseTest;
import org.apache.torque.generator.configuration.UnitDescriptor;
import org.apache.torque.generator.configuration.paths.CustomProjectPaths;
@@ -227,13 +228,18 @@ public class PropertyToJavaGenerationTes
= new File(targetDir, "Properties.properties");
assertTrue(propertiesResultFile.exists());
- // change checksum file
+ // change checksum in checksums file
File checksumFile = new File(
cacheDir,
- "last-source-changes/propertiesData.properties.checksum");
- long checksumFileLastModified = checksumFile.lastModified();
- FileUtils.writeStringToFile(checksumFile, "abc", "ISO-8859-1");
- assertTrue(checksumFile.setLastModified(checksumFileLastModified));
+ "last-source-changes.checksums");
+ String checksumContent = FileUtils.readFileToString(checksumFile, "ISO-8859-1");
+ // check contains only one line
+ assertEquals(1, StringUtils.countMatches(checksumContent, "\n"));
+ int firstMinusPos = checksumContent.indexOf("-");
+ int secondMinusPos = checksumContent.indexOf("-", firstMinusPos + 1);
+ String checksum = checksumContent.substring(firstMinusPos, secondMinusPos + 1);
+ String changedChecksumContent = checksumContent.replace(checksum, "-AA-");
+ FileUtils.writeStringToFile(checksumFile, changedChecksumContent, "ISO-8859-1");
// delete target so we can see if generation runs again
assertTrue(propertiesResultFile.delete());
---------------------------------------------------------------------
To unsubscribe, e-mail: torque-dev-unsubscribe@db.apache.org
For additional commands, e-mail: torque-dev-help@db.apache.org