You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by ta...@apache.org on 2007/01/04 07:31:49 UTC
svn commit: r492423 [1/5] - in /portals/jetspeed-2/trunk: components/
components/portal/ components/portal/src/test/org/apache/jetspeed/aggregator/
components/registry/
components/security/src/java/org/apache/jetspeed/security/impl/
components/serializ...
Author: taylor
Date: Wed Jan 3 22:31:48 2007
New Revision: 492423
URL: http://svn.apache.org/viewvc?view=rev&rev=492423
Log:
https://issues.apache.org/jira/browse/JS2-461
Population scripts are now converted to run with Serializer component
All seed data is sourced from XML
integrated into all builds (maven-1, maven-2, custom-maven-1, custom-maven-2)
this commit does not include the DDL UTILS replacement of the Torque/SQL DDL scripts
The original contribution had too many errors with DDL UTILs
I've included the all-or-none patches in build-with-DDLUTILS.xml, pom-with-DDLUTILS.xml, and plugin-with-DDLUTILS.jelly
contribution from Hajo Birthelmer
Added:
portals/jetspeed-2/trunk/etc/build-with-DDLUTILS.xml
portals/jetspeed-2/trunk/etc/pom-with-DDLUTILS.xml
portals/jetspeed-2/trunk/etc/schema/merge.xslt
portals/jetspeed-2/trunk/maven-plugin/plugin-with-DDLUTILS.jelly
Modified:
portals/jetspeed-2/trunk/components/pom.xml
portals/jetspeed-2/trunk/components/portal/pom.xml
portals/jetspeed-2/trunk/components/portal/project.xml
portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestWorkerMonitor.java
portals/jetspeed-2/trunk/components/registry/pom.xml
portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/RdbmsPolicy.java
portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLApplication.java
portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLUtil.java
portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerApplication.java
portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java
portals/jetspeed-2/trunk/etc/build.xml
portals/jetspeed-2/trunk/etc/pom.xml
portals/jetspeed-2/trunk/etc/schema/security-schema.xml
portals/jetspeed-2/trunk/maven-archetypes/portal/src/archetype/archetype-resources/etc/build.xml
portals/jetspeed-2/trunk/maven-archetypes/portal/src/archetype/archetype-resources/etc/pom.xml
portals/jetspeed-2/trunk/maven-plugin/plugin.jelly
Modified: portals/jetspeed-2/trunk/components/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/pom.xml?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/pom.xml (original)
+++ portals/jetspeed-2/trunk/components/pom.xml Wed Jan 3 22:31:48 2007
@@ -145,7 +145,7 @@
<directory>../../etc/db-ojb</directory>
</testResource>
<testResource>
- <directory>../../src/webapp/WEB-INF/assembly</directory>
+ <directory>../../src/webapp/WEB-INF/assembly/boot</directory>
</testResource>
</testResources>
Modified: portals/jetspeed-2/trunk/components/portal/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/pom.xml?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/pom.xml (original)
+++ portals/jetspeed-2/trunk/components/portal/pom.xml Wed Jan 3 22:31:48 2007
@@ -229,6 +229,16 @@
</testResources>
<plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ <excludes>
+ <exclude>**/*TestAggregator.java</exclude>
+ </excludes>
+ </configuration>
+ </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
Modified: portals/jetspeed-2/trunk/components/portal/project.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/project.xml?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/project.xml (original)
+++ portals/jetspeed-2/trunk/components/portal/project.xml Wed Jan 3 22:31:48 2007
@@ -50,6 +50,9 @@
<includes>
<include>**/Test*</include>
</includes>
+ <excludes>
+ <exclude>**/TestAggregator.java</exclude>
+ </excludes>
<resources>
<resource>
<directory>${basedir}/src/java</directory>
Modified: portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestWorkerMonitor.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestWorkerMonitor.java?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestWorkerMonitor.java (original)
+++ portals/jetspeed-2/trunk/components/portal/src/test/org/apache/jetspeed/aggregator/TestWorkerMonitor.java Wed Jan 3 22:31:48 2007
@@ -30,7 +30,7 @@
* <P>Test the aggregation service</P>
*
* @author <a href="mailto:david@bluesunrise.com">David Sean Taylor</a>
- * @version $Id: TestAggregator.java 279463 2005-09-07 23:45:24Z taylor $
+ * @version $Id: $
*
*/
public class TestWorkerMonitor extends TestCase
Modified: portals/jetspeed-2/trunk/components/registry/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/registry/pom.xml?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/registry/pom.xml (original)
+++ portals/jetspeed-2/trunk/components/registry/pom.xml Wed Jan 3 22:31:48 2007
@@ -88,6 +88,34 @@
<!-- Build Configuration -->
<build>
+ <testResources>
+ <testResource>
+ <directory>etc/assembly</directory>
+ </testResource>
+ <testResource>
+ <directory>src/java</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ <exclude>**/JETSPEED-INF/**</exclude>
+ </excludes>
+ </testResource>
+ <testResource>
+ <directory>src/test</directory>
+ <excludes>
+ <exclude>**/*.java</exclude>
+ </excludes>
+ </testResource>
+ <testResource>
+ <directory>../../etc/log4j</directory>
+ </testResource>
+ <testResource>
+ <directory>../../etc/db-ojb</directory>
+ </testResource>
+ <testResource>
+ <directory>../../src/webapp/WEB-INF/assembly</directory>
+ </testResource>
+ </testResources>
+
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
@@ -146,11 +174,6 @@
</plugin>
</plugins>
- <testResources>
- <testResource>
- <directory>etc/assembly</directory>
- </testResource>
- </testResources>
</build>
<!-- Project Information -->
Modified: portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/RdbmsPolicy.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/RdbmsPolicy.java?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/RdbmsPolicy.java (original)
+++ portals/jetspeed-2/trunk/components/security/src/java/org/apache/jetspeed/security/impl/RdbmsPolicy.java Wed Jan 3 22:31:48 2007
@@ -77,10 +77,10 @@
*/
public void refresh()
{
- if (log.isDebugEnabled())
- {
- log.debug("RdbmsPolicy refresh called.");
- }
+// if (log.isDebugEnabled())
+// {
+// log.debug("RdbmsPolicy refresh called.");
+// }
}
/**
Modified: portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLApplication.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLApplication.java?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLApplication.java (original)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLApplication.java Wed Jan 3 22:31:48 2007
@@ -15,15 +15,25 @@
*/
package org.apache.jetspeed.serializer;
+import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileWriter;
import java.io.FilenameFilter;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
import javolution.xml.XMLBinding;
import javolution.xml.XMLObjectReader;
@@ -54,6 +64,11 @@
* </p>
*
* <p>
+ * -m if directory list provided this is the merge file to use. If not set here
+ * or in the properties file, a hardcoded version is used
+ * </p>
+ *
+ * <p>
* note that - if -I and -O are specified, the output file will contain the
* UPDATED database
* </p>
@@ -66,6 +81,9 @@
* </p>
*
* <p>
+ * -dn databaseName, for example MYSQL or ORACLE10
+ * </p>
+ * <p>
* -dc driverClass, for example com.mysql.jdbc.Driver
* </p>
* <p>
@@ -79,7 +97,7 @@
* -dp password
* </p>
* <p>
- * -l log4j-level, ERROR (default), WARN, INFO
+ * -l log4j-level, ERROR (default), WARN, INFO
* </p>
*
* @author <a href="mailto:hajo@bluesunrise.com">Hajo Birthelmer</a>
@@ -93,48 +111,49 @@
String exludeFileName = null;
String orderFileName = null;
- String logLevel = null;
+ String logLevel = null;
PropertiesConfiguration configuration = null;
boolean doImport = false;
boolean doExport = false;
String schemaDirectory = null; // if specified all xml files in that
- // directory will be processed
+ // directory will be processed
String outputFile = null; // if specified the database schema will be
- // exported to that file
+ // exported to that file
boolean overwrite = false; // default, do not overwrite the database
- // (ignored if only output)
+ // (ignored if only output)
String driverClass = null; // jdbc driver
String url = null; // jdbc url to database
String user = null; // user
String password = null; // password
-
+ String databaseName = null;
+
String[] filesToProcess = null;
+ String mergeFile = null; //name of XSLT merge file
String[] args = null;
-
-
-
public static void main(String[] args) throws Exception
{
JetspeedDDLApplication app = new JetspeedDDLApplication();
app.processArguments(args);
}
-
-
public JetspeedDDLApplication()
{
}
-
+
/**
* ensure that we have valid database settings
- *
+ *
*/
private void checkDBSettings()
{
+ if (databaseName == null)
+ databaseName = System.getProperty(
+ "org.apache.jetspeed.database.databaseName",
+ "mysql");
if (driverClass == null)
driverClass = System.getProperty(
"org.apache.jetspeed.database.driverClass",
@@ -160,11 +179,11 @@
"Can't proceed without a valid database user");
return;
}
-
+
/**
- * parse arguments for process instructions, order and exclude files as well as
- * optional database arguments
- *
+ * parse arguments for process instructions, order and exclude files as well
+ * as optional database arguments
+ *
*/
private void parseArguments()
{
@@ -182,28 +201,55 @@
} else if (args[n].equals("-s"))
{
orderFileName = args[++n];
- } else if (args[n].equals("-x"))
+ }
+ else if (args[n].equals("-x"))
{
exludeFileName = args[++n];
- } else if (args[n].equals("-R"))
+ }
+ else if (args[n].equals("-m"))
+ {
+ mergeFile = args[++n];
+ }
+ else if (args[n].equals("-R"))
overwrite = true;
+ else if (args[n].equals("-dn"))
+ {
+ databaseName = args[++n];
+ }
else if (args[n].equals("-dc"))
driverClass = args[++n];
else if (args[n].equals("-ds"))
url = args[++n];
else if (args[n].equals("-du"))
- user = args[++n];
+ {
+ if (((n + 1) >= args.length) || args[n + 1].startsWith("-d"))
+ {
+ user = "";
+ } else
+ {
+ user = args[++n];
+ }
+ }
else if (args[n].equals("-dp"))
- password = args[++n];
+ {
+ if (((n + 1) >= args.length) || args[n + 1].startsWith("-d"))
+ {
+ password = "";
+ } else
+ {
+ password = args[++n];
+ }
+ }
else if (args[n].equals("-P"))
propertyFileName = args[++n];
- else if (args[n].equals("-l")) logLevel = args[++n];
+ else if (args[n].equals("-l"))
+ logLevel = args[++n];
else
throw new IllegalArgumentException("Unknown argument: "
+ args[n]);
}
-
+
}
/**
@@ -217,7 +263,7 @@
try
{
File dir = new File(schemaDirectory);
- if (!(dir.exists()))
+ if (!(dir.exists()))
return fileList;
if (!(dir.isDirectory()))
{
@@ -225,8 +271,9 @@
fileList[0] = schemaDirectory;
return fileList;
}
- // Handling a directory
- LocalFilenameFilter filter = new LocalFilenameFilter(exludeFileName,orderFileName);
+ // Handling a directory
+ LocalFilenameFilter filter = new LocalFilenameFilter(
+ exludeFileName, orderFileName);
File[] files = dir.listFiles(filter);
if (files == null)
return fileList;
@@ -259,9 +306,10 @@
String filename = null;
try
{
- filename= ((JSGroup)_it.next()).getName();
+ filename = ((JSGroup) _it.next()).getName();
+ } catch (Exception eeee)
+ {
}
- catch (Exception eeee) {}
if (filename != null)
{
for (int i = 0; i < files.length; i++)
@@ -271,7 +319,7 @@
fileList[j++] = files[i].getAbsolutePath();
tempList[i] = null;
}
- }
+ }
}
}
for (int i = 0; i < files.length; i++)
@@ -280,8 +328,7 @@
fileList[j++] = files[i].getAbsolutePath();
}
return fileList;
- }
- catch (Exception eee)
+ } catch (Exception eee)
{
eee.printStackTrace();
return null;
@@ -289,19 +336,18 @@
} catch (Exception e)
{
- e.printStackTrace();
+ e.printStackTrace();
throw new IllegalArgumentException(
"Processing the schema-directory " + schemaDirectory
- + " caused exception "
- + e.getLocalizedMessage());
+ + " caused exception " + e.getLocalizedMessage());
}
-
}
-
+
/**
- * setup environment by processing all arguments and call
- * requested process routine
+ * setup environment by processing all arguments and call requested process
+ * routine
+ *
* @param arguments
* @throws Exception
*/
@@ -317,7 +363,6 @@
processPropertyFile();
checkDBSettings();
-
/**
* The only required argument is the filename for either export or
@@ -338,25 +383,23 @@
JetspeedDDLUtil ddlUtil = null;
HashMap context = new HashMap();
-
+ context.put(JetspeedDDLUtil.DATASOURCE_DATABASENAME, databaseName);
context.put(JetspeedDDLUtil.DATASOURCE_DRIVER, driverClass);
context.put(JetspeedDDLUtil.DATASOURCE_URL, url);
context.put(JetspeedDDLUtil.DATASOURCE_USERNAME, user);
context.put(JetspeedDDLUtil.DATASOURCE_PASSWORD, password);
- Logger logger = Logger.getLogger("org.apache.ddlutils");
+ Logger logger = Logger.getLogger("org.apache.ddlutils");
Level level = logger.getLevel();
if (logLevel == null)
logger.setLevel(Level.ERROR);
+ else if (logLevel.equalsIgnoreCase("INFO"))
+ logger.setLevel(Level.INFO);
+ else if (logLevel.equalsIgnoreCase("WARN"))
+ logger.setLevel(Level.WARN);
else
- if (logLevel.equalsIgnoreCase("INFO"))
- logger.setLevel(Level.INFO);
- else
- if (logLevel.equalsIgnoreCase("WARN"))
- logger.setLevel(Level.WARN);
- else
- logger.setLevel(Level.ERROR);
-
+ logger.setLevel(Level.ERROR);
+
try
{
ddlUtil = new JetspeedDDLUtil();
@@ -370,8 +413,10 @@
}
try
{
- if (doImport) processImport(ddlUtil);
- if (doExport) processExport(ddlUtil);
+ if (doImport)
+ processImport(ddlUtil);
+ if (doExport)
+ processExport(ddlUtil);
} catch (Exception e)
{
System.err.println("Failed to process XML "
@@ -394,49 +439,204 @@
}
}
-
}
/**
- * create/alter database
+ * create/alter database
*
* @param ddlUtil
*/
private void processImport(JetspeedDDLUtil ddlUtil)
{
- for (int i = 0; i < filesToProcess.length; i++)
+ String file = null;
+ if ((filesToProcess == null) || (filesToProcess.length == 0))
+ return;
+ if (filesToProcess.length > 1)
+ file = mergeFiles(filesToProcess);
+
+ System.out.println("Importing " + file);
+ Database db = ddlUtil.createDatabaseSchemaFromXML(file);
+ try
{
- String file = filesToProcess[i];
- System.out.println("Importing " + file);
- Database db = ddlUtil.createDatabaseSchemaFromXML(file);
- try
- {
- if ((i == 0) && (overwrite))
- ddlUtil.createDatabase(db); // overwrite existing
- // database
- else
- ddlUtil.alterDatabase(db);
- System.out.println("Importing " + file + " completed");
- }
- catch (Exception ePr)
- {
- ePr.printStackTrace();
- //continue with the process despite that one of the files was bad...
+ if (overwrite)
+ ddlUtil.createDatabase(db); // overwrite existing
+ // database
+ else
+ ddlUtil.alterDatabase(db);
+ System.out.println("Importing " + file + " completed");
+ } catch (Exception ePr)
+ {
+ ePr.printStackTrace();
+ // continue with the process despite that one of the files was
+ // bad...
+ }
+
+ }
+
+ /**
+ * Helper routine to create a temporary file
+ *
+ * @param suffix
+ * @return
+ */
+ private File createTemp(String suffix)
+ {
+ try
+ {
+ // Create temp file.
+ File temp = File.createTempFile("tmp", suffix);
+
+ // Delete temp file when program exits.
+ temp.deleteOnExit();
+ return temp;
+ } catch (IOException e)
+ {
+ System.out.println("Failed to create temproary file with "
+ + e.getLocalizedMessage());
+ e.printStackTrace();
+ return null;
+ }
+
+ }
+ /**
+ * Open the merge file from disk
+ *
+ * @param fileName
+ * @return
+ */
+ private File createXSLTFromFile(String fileName)
+ {
+ if (fileName == null)
+ return null;
+ try
+ {
+ File f = new File(fileName);
+ if (f.exists())
+ return f;
+ return null;
+ }
+ catch (Exception e)
+ {
+ System.out.println("Failed to open merge template " + e.getLocalizedMessage());
+ e.printStackTrace();
+ return null;
+ }
+ }
+ /**
+ * If everything else fails, use a hardcoded XSLT here
+ *
+ * @return
+ */
+ private File createXSLTFromMemory()
+ {
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("<?xml version=\"1.0\"?>");
+ buffer
+ .append("<xslt:transform version=\"1.0\" xmlns:xslt=\"http://www.w3.org/1999/XSL/Transform\">");
+ buffer
+ .append("<!-- Simple template to merge two database schemas into one -->");
+ buffer.append("<xslt:param name=\"fileTwo\" />");
+ buffer.append("<xslt:template match=\"/\">");
+
+ buffer.append("<xslt:message>");
+ buffer
+ .append("<xslt:text /> Merging input with '<xslt:value-of select=\"$fileTwo\"/>");
+ buffer.append("<xslt:text>'</xslt:text>");
+ buffer.append("</xslt:message>");
+ buffer.append("<xslt:if test=\"string($fileTwo)=''\">");
+ buffer.append("<xslt:message terminate=\"yes\">");
+ buffer
+ .append("<xslt:text>No input file specified (parameter 'fileTwo')</xslt:text>");
+ buffer.append("</xslt:message>");
+ buffer.append("</xslt:if>");
+ buffer.append("<database name=\"generic\">");
+ buffer.append("<xslt:apply-templates />");
+ buffer.append("</database>");
+ buffer.append("</xslt:template>");
+ buffer.append("<xslt:template match=\"database\">");
+ buffer.append("<xslt:apply-templates />");
+ buffer.append("<xslt:apply-templates select=\"document($fileTwo)/database/table\"/>");
+ buffer.append("</xslt:template>");
+
+ buffer.append("<xslt:template match=\"@*|node()\">");
+ buffer.append("<xslt:copy>");
+ buffer.append("<xslt:apply-templates select=\"@*|node()\"/>");
+ buffer.append("</xslt:copy>");
+ buffer.append("</xslt:template>");
+ buffer.append("</xslt:transform>");
+
+ File xslt = createTemp(".xslt");
+ try
+ {
+ // Write to temp file
+
+ BufferedWriter out = new BufferedWriter(new FileWriter(xslt));
+ out.write(buffer.toString());
+ out.close();
+ return xslt;
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+ }
+ /**
+ * process of merging two or more schema files into one schema file.
+ *
+ * @param fileList The filelist contains a (potentially) ordered list of schemas
+ * @return The name of the created temporary schema file
+ */
+ private String mergeFiles(String[] fileList)
+ {
+ try
+ {
+ File xsltFile = createXSLTFromFile(mergeFile);
+ if (xsltFile == null)
+ xsltFile = createXSLTFromMemory();
+ Source xslt = new StreamSource(xsltFile);
+ Transformer transformer = TransformerFactory.newInstance()
+ .newTransformer(xslt);
+
+ String sourceName = fileList[0];
+ File target = null;
+ for (int i = 1; i < fileList.length; i++)
+ {
+ File soureFile = new File(sourceName);
+ Source source = new StreamSource(soureFile);
+ // JAXP reads data using the Source interface
+ target = createTemp(".xml");
+
+ Result targetResult = new StreamResult(target);
+ File f = new File(fileList[i]);
+ String other = "file:///" + f.getCanonicalPath(); // required on Win-platforms
+ other = other.replace('\\', '/');
+
+ transformer.setParameter("fileTwo", other);
+ transformer.transform(source, targetResult);
+ sourceName = target.getAbsolutePath();
}
+ return sourceName;
+
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ return null;
}
+
}
-
+
/**
* read database schema to file
*
*/
private void processExport(JetspeedDDLUtil ddlUtil)
{
- //TODO: implement
+ // TODO: implement
ddlUtil.writeDatabaseSchematoFile(this.outputFile);
}
-
+
/**
* read the property file and read what has not yet been defined
*/
@@ -469,6 +669,8 @@
user = configuration.getString("user");
if (password == null)
password = configuration.getString("password");
+ if (mergeFile == null)
+ mergeFile = configuration.getString("mergeFile");
if (!(doImport))
{
schemaDirectory = configuration.getString("schema");
@@ -485,12 +687,9 @@
logLevel = configuration.getString("loglevel");
}
-
+
}
-
-
-
-
+
private static String[] getTokens(String _line)
{
if ((_line == null) || (_line.length() == 0))
@@ -539,72 +738,64 @@
return query.toString();
}
-
-
-
-
-
/**
* read an xml file describing the basic order of the files to be processed
+ *
* @param importFileName
* @return
* @throws SerializerException
*/
-
- private ArrayList readOrderFile(String importFileName)
+
+ private ArrayList readOrderFile(String importFileName)
{
XMLObjectReader reader = null;
-
- XMLBinding binding = new XMLBinding();
- binding.setAlias(ArrayList.class, "ProcessOrder");
- binding.setAlias(JSGroup.class, "File");
-
- ArrayList snap = null;
+ XMLBinding binding = new XMLBinding();
+ binding.setAlias(ArrayList.class, "ProcessOrder");
+ binding.setAlias(JSGroup.class, "File");
+
+ ArrayList snap = null;
try
{
- reader = XMLObjectReader.newInstance(new FileInputStream(
- importFileName));
+ reader = XMLObjectReader.newInstance(new FileInputStream(
+ importFileName));
} catch (Exception e)
{
- e.printStackTrace();
- return null;
+ e.printStackTrace();
+ return null;
}
try
{
- reader.setBinding(binding);
- snap = (ArrayList) reader.read("ProcessOrder",
- ArrayList.class);
-
+ reader.setBinding(binding);
+ snap = (ArrayList) reader.read("ProcessOrder", ArrayList.class);
+
} catch (Exception e)
{
- e.printStackTrace();
+ e.printStackTrace();
} finally
{
- /** ensure the reader is closed */
- try
- {
- reader.close();
- } catch (Exception e1)
- {
- /**
- * don't do anything with this exception - never let the bubble
- * out of the finally block
- */
- }
+ /** ensure the reader is closed */
+ try
+ {
+ reader.close();
+ } catch (Exception e1)
+ {
+ /**
+ * don't do anything with this exception - never let the bubble
+ * out of the finally block
+ */
+ }
}
- return snap;
+ return snap;
}
-
-
class LocalFilenameFilter implements FilenameFilter
{
String exclude = null;
String sortFile = null;
String sort = null;
-
+
String getSortFile()
{
return sortFile;
@@ -613,7 +804,7 @@
{
this.exclude = exclude;
this.sort = sort;
-
+
}
public boolean accept(File dir, String name)
{
@@ -626,11 +817,10 @@
sortFile = dir.getAbsolutePath() + "/" + sort;
return false;
}
-
+
return name.endsWith(".xml");
}
}
-
}
Modified: portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLUtil.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLUtil.java?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLUtil.java (original)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLUtil.java Wed Jan 3 22:31:48 2007
@@ -36,11 +36,10 @@
import org.apache.ddlutils.io.DataReader;
import org.apache.ddlutils.io.DataToDatabaseSink;
import org.apache.ddlutils.io.DatabaseIO;
+import org.apache.ddlutils.model.Column;
import org.apache.ddlutils.model.Database;
import org.apache.ddlutils.model.JdbcTypeCategoryEnum;
import org.apache.ddlutils.model.Table;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
/**
* Jetspeed DDLUtil
@@ -53,6 +52,7 @@
*/
public class JetspeedDDLUtil
{
+ public static final String DATASOURCE_DATABASENAME = "DATABASENAME".intern();
public static final String DATASOURCE_CLASS = "DATASOURCE_CLASS".intern();
public static final String DATASOURCE_DRIVER = "driverClassName".intern();
public static final String DATASOURCE_URL = "url".intern();
@@ -145,7 +145,9 @@
*/
protected Database createDatabaseSchemaFromXML(String fileName)
{
- return new DatabaseIO().read(fileName);
+ DatabaseIO io = new DatabaseIO();
+ io.setValidateXml(false);
+ return io.read(fileName);
}
/**
@@ -223,6 +225,8 @@
}
catch (Exception aEX)
{
+ System.out.println("Error in ALTER DATABASE");
+ aEX.printStackTrace();
log.error(aEX);
}
} else
@@ -235,10 +239,11 @@
// String s = platform.getDropTablesSql(model, true);
// log.debug(s);
// }
- platform.dropTables(model, true);
-
-
-
+ if (model == null)
+ {
+ model = targetModel;
+ }
+ platform.dropTables(model, true);
}
catch (Exception aEX)
{
@@ -246,14 +251,30 @@
}
try
{
- platform.createTables(targetModel, false, true);
+ platform.createTables(model, false, true);
+ if (this._databaseName.startsWith("oracle"))
+ {
+ model = this.readModelFromDatabase(null);
+ modifyVarBinaryColumn(model, "PA_METADATA_FIELDS", "COLUMN_VALUE");
+ modifyVarBinaryColumn(model, "PD_METADATA_FIELDS", "COLUMN_VALUE");
+ modifyVarBinaryColumn(model, "LANGUAGE", "KEYWORDS");
+ modifyVarBinaryColumn(model, "PORTLET_CONTENT_TYPE", "MODES");
+ modifyVarBinaryColumn(model, "PARAMETER", "PARAMETER_VALUE");
+ modifyVarBinaryColumn(model, "LOCALIZED_DESCRIPTION", "DESCRIPTION");
+ modifyVarBinaryColumn(model, "LOCALIZED_DISPLAY_NAME", "DISPLAY_NAME");
+ modifyVarBinaryColumn(model, "CUSTOM_PORTLET_MODE", "DESCRIPTION");
+ modifyVarBinaryColumn(model, "CUSTOM_WINDOW_STATE", "DESCRIPTION");
+ modifyVarBinaryColumn(model, "MEDIA_TYPE", "DESCRIPTION");
+ platform.alterTables(model, true);
+ }
}
catch (Exception aEX)
{
+ aEX.printStackTrace();
log.error(aEX);
}
}
- model = this.readModelFromDatabase(null);
+ // TODO: DST: REMOVE, AINT WORKING IN ORACLE model = this.readModelFromDatabase(null);
} catch (Exception ex)
{
ex.printStackTrace();
@@ -263,6 +284,14 @@
}
}
+ private void modifyVarBinaryColumn(Database targetModel, String tableName, String columnName)
+ {
+ Table table = targetModel.findTable(tableName);
+ Column c = table.findColumn(columnName);
+ c.setType("VARCHAR");
+ c.setSize("2000");
+ System.out.println("updating column " + c.getName() + " for table " + table.getName());
+ }
/**
* Alter an existing database from the given model. Data is preserved as
* much as possible
@@ -386,24 +415,45 @@
{
throw new DatabaseOperationException(ex);
}
-
- _databaseName = new PlatformUtils().determineDatabaseType(dataSource);
+ String databaseName = null;
+ _databaseName = null;
+ try
+ {
+ databaseName = (String) parameters.get(DATASOURCE_DATABASENAME);
+ if (databaseName != null)
+ {
+ platform = PlatformFactory.createNewPlatformInstance(databaseName);
+ if (platform != null)
+ _databaseName = databaseName;
+ }
+ } catch (Exception ex)
+ {
+ log.warn("Exception in trying to establish connection to " + databaseName + " : " + ex.getLocalizedMessage());
+ log.warn(ex);
+ }
if (_databaseName == null)
{
- throw new DatabaseOperationException(
+ _databaseName = new PlatformUtils().determineDatabaseType(dataSource);
+ if (_databaseName == null)
+ {
+ throw new DatabaseOperationException(
"Could not determine platform from datasource, please specify it in the jdbc.properties via the ddlutils.platform property");
+ }
+ else
+ {
+ try
+ {
+ platform = PlatformFactory.createNewPlatformInstance(_databaseName);
+ } catch (Exception ex)
+ {
+ throw new DatabaseOperationException(
+ "Could not establish connection to " + _databaseName + " : " + ex.getLocalizedMessage(),ex);
+ }
+ }
}
-
// com.mysql.jdbc.Driver
writer = new StringWriter();
- try
- {
- platform = PlatformFactory.createNewPlatformInstance(_databaseName);
- } catch (Exception ex)
- {
- throw new DatabaseOperationException(ex);
- }
platform.getSqlBuilder().setWriter(writer);
// if (platform.getPlatformInfo().isDelimitedIdentifiersSupported())
// {
@@ -412,8 +462,9 @@
platform.setDataSource(dataSource);
-
+ System.out.println("reading model...");
model = this.readModelFromDatabase(null);
+ System.out.println("done reading model...");
/**
JdbcModelReader reader = platform.getModelReader();
try
Modified: portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerApplication.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerApplication.java?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerApplication.java (original)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerApplication.java Wed Jan 3 22:31:48 2007
@@ -15,6 +15,8 @@
*/
package org.apache.jetspeed.serializer;
+import java.io.File;
+import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
@@ -28,15 +30,16 @@
* Jetspeed Serializer Application
*
* invoke with mandatory
- * <p>-E filename or -I filename to denote the export or the import file
- *
+ * <p>-E filename or -I filename to denote the export or the import file</p>
+ * <p>-I filename | directory, if a directory will process all XML files of pattern "*seed.xml"</p>
+ *
* invoke with (optional) parameters as
- * <p>-p propertyFilename : overwrite the default filename defined in System.getProperty JetSpeed.Serializer.Configuration
- * <p>-a ApplicationPath : overwrite the default ./ or ApplicationPath property in properties file)
- * <p>-b bootPath : directory to Spring boot files, overwrite the default assembly/boot/ or bootPath property in properties file)
- * <p>-c configPath : directory to Spring config files, overwrite the default assembly/ or configPath property in properties file)
+ * <p>-p propertyFilename : overwrite the default filename defined in System.getProperty JetSpeed.Serializer.Configuration</p>
+ * <p>-a ApplicationPath : overwrite the default ./ or ApplicationPath property in properties file)</p>
+ * <p>-b bootPath : directory to Spring boot files, overwrite the default assembly/boot/ or bootPath property in properties file)</p>
+ * <p>-c configPath : directory to Spring config files, overwrite the default assembly/ or configPath property in properties file)</p>
*
- * <p>-o optionstring : overwrite defrault "ALL,REPLACE"
+ * <p>-o optionstring : overwrite defrault "ALL,REPLACE"</p>
* <p>optionstring:
* ALL - extract/import all
* USER - extract/import users
@@ -45,7 +48,7 @@
* PROFILE = extract/import profile settings (for export requires USER)
* NOOVERWRITE = don't overwrite existing file (for export)
* BACKUP = backup before process
-
+ * </p>
* <p>
* -dc driverClass, for example com.mysql.jdbc.Driver
* </p>
@@ -75,8 +78,7 @@
{
String propertyFileName = null;
- String fileName = null; // XML filename - mandatory on command line
-
+ String fileName = null; // XML filename - mandatory on command line
String applicationPath = null; // configuration.getProperties("applicationPath");
String bootConfigFiles = null; // configuration.getProperties("bootConfigFiles");
String configFiles = null; // configuration.getProperties("configFiles");
@@ -104,28 +106,64 @@
// Parse all the command-line arguments
- for(int n = 0; n < args.length; n++)
+ for (int n = 0; n < args.length; n++)
{
- if (args[n].equals("-p")) propertyFileName = args[++n];
- else if (args[n].equals("-a")) applicationPath = args[++n];
- else if (args[n].equals("-b")) bootConfigFiles = args[++n];
- else if (args[n].equals("-c")) configFiles = args[++n];
- else if (args[n].equals("-E")) { doExport = true; fileName = args[++n];}
- else if (args[n].equals("-I")) { doImport = true; fileName = args[++n];}
- else if (args[n].equals("-N")) name = args[++n];
- else if (args[n].equals("-l")) logLevel = args[++n];
- else if (args[n].equals("-O")) options = args[++n];
- else if (args[n].equals("-dc"))
- driverClass = args[++n];
- else if (args[n].equals("-ds"))
- url = args[++n];
- else if (args[n].equals("-du"))
- user = args[++n];
- else if (args[n].equals("-dp"))
- password = args[++n];
- else throw new IllegalArgumentException("Unknown argument: " + args[n]);
+ if (args[n].equals("-p"))
+ propertyFileName = args[++n];
+ else if (args[n].equals("-a"))
+ applicationPath = args[++n];
+ else if (args[n].equals("-b"))
+ bootConfigFiles = args[++n];
+ else if (args[n].equals("-c"))
+ configFiles = args[++n];
+ else if (args[n].equals("-E"))
+ {
+ doExport = true;
+ fileName = args[++n];
+ }
+ else if (args[n].equals("-I"))
+ {
+ doImport = true;
+ fileName = args[++n];
+ }
+ else if (args[n].equals("-N"))
+ {
+ name = args[++n];
+ }
+ else if (args[n].equals("-l"))
+ logLevel = args[++n];
+ else if (args[n].equals("-O"))
+ options = args[++n];
+ else if (args[n].equals("-dc"))
+ driverClass = args[++n];
+ else if (args[n].equals("-ds"))
+ url = args[++n];
+ else if (args[n].equals("-du"))
+ {
+ if (((n + 1) >= args.length) || args[n + 1].startsWith("-d"))
+ {
+ user = "";
+ } else
+ {
+ user = args[++n];
+ }
+ }
+ else if (args[n].equals("-dp"))
+ {
+ if (((n + 1) >= args.length) || args[n + 1].startsWith("-d"))
+ {
+ password = "";
+ } else
+ {
+ password = args[++n];
+ }
+ }
+ else
+ {
+ throw new IllegalArgumentException("Unknown argument: "
+ + args[n]);
+ }
}
-
/** The only required argument is the filename for either export or import*/
if ((!doImport) && (!doExport))
@@ -158,11 +196,16 @@
{
/** only read what was not defined on the command line */
- if (applicationPath == null) applicationPath = configuration.getString("applicationPath");
- if (bootConfigFiles == null) applicationPath = configuration.getString("bootConfigFiles");
- if (configFiles == null) applicationPath = configuration.getString("configFiles");
- if (options == null) applicationPath = configuration.getString("options");
- if (defaultIndent == null) applicationPath = configuration.getString("defaultIndent");
+ if (applicationPath == null)
+ applicationPath = configuration.getString("applicationPath");
+ if (bootConfigFiles == null)
+ bootConfigFiles = configuration.getString("bootConfigFiles");
+ if (configFiles == null)
+ configFiles = configuration.getString("configFiles");
+ if (options == null)
+ options = configuration.getString("options");
+ if (defaultIndent == null)
+ defaultIndent = configuration.getString("defaultIndent");
if (driverClass == null)
driverClass = configuration.getString("driverClass");
@@ -180,10 +223,14 @@
}
// if we still miss some settings, use hardoced defaults
- if (applicationPath == null) applicationPath = "./";
- if (bootConfigFiles == null) bootConfigFiles = "assembly/boot/";
- if (configFiles == null) configFiles = "assembly/";
- if (logLevel == null) logLevel = "ERROR";
+ if (applicationPath == null)
+ applicationPath = "./";
+ if (bootConfigFiles == null)
+ bootConfigFiles = "assembly/boot/";
+ if (configFiles == null)
+ configFiles = "assembly/";
+ if (logLevel == null)
+ logLevel = "ERROR";
bootConfigFiles = bootConfigFiles + "*.xml";
@@ -297,44 +344,123 @@
e.printStackTrace();
System.exit(1);
}
-
System.out.println("starter framework established " + starter);
-
- try
+ String[] importList = null;
+
+ if (doImport)
+ importList = parseFiles(fileName);
+
+ if ((doImport) && (importList != null) && (importList.length > 0))
{
- serializer = new JetspeedSerializerImpl(starter.getComponentManager());
- if (doExport)
- serializer.exportData(name, fileName, settings);
- else
- serializer.importData(fileName, settings);
-
- }
- catch (Exception e)
+ for (int i = 0; i < importList.length; i++)
+ {
+ try
+ {
+ System.out.println("processing import " + importList[i]);
+ serializer = new JetspeedSerializerImpl(starter.getComponentManager());
+ serializer.importData(importList[i], settings);
+ System.out.println("processing import " + importList[i] + " done");
+
+ }
+ catch (Exception e)
+ {
+ System.err.println("Failed to process XML import for " + importList[i] + ":" + e);
+ e.printStackTrace();
+ }
+ finally
+ {
+ if (serializer != null)
+ serializer.closeUp();
+ }
+ }
+ }
+ if (doExport)
{
- System.err.println("Failed to process XML " + (doExport?"export":"import")+ ":" + e);
- e.printStackTrace();
+ try
+ {
+ serializer = new JetspeedSerializerImpl(starter.getComponentManager());
+ serializer.exportData(name, fileName, settings);
+ }
+ catch (Exception e)
+ {
+ System.err.println("Failed to process XML export of " + fileName + ": " + e);
+ e.printStackTrace();
+ }
+ finally
+ {
+ if (serializer != null)
+ serializer.closeUp();
+ }
+
}
- finally
+ try
{
- if (serializer != null)
- serializer.closeUp();
- try
- {
- starter.tearDown();
- logger.setLevel(level);;
- }
- catch (Exception e1)
- {
- System.out.println("starter framework teardown caused exception " + e1.getLocalizedMessage());
- e1.printStackTrace();
-
- }
- System.out.println("DONE performing " + (doExport?"export":"import")+ " with " + fileName);
+ starter.tearDown();
+ logger.setLevel(level);;
}
-
+ catch (Exception e1)
+ {
+ System.out.println("starter framework teardown caused exception " + e1.getLocalizedMessage());
+ e1.printStackTrace();
+
+ }
+ System.out.println("DONE performing " + (doExport?"export":"import")+ " with " + fileName);
}
+
+ /**
+ * process provided filename or directory name
+ *
+ * @return one or more files to be processed
+ */
+ static private String[] parseFiles(String schemaDirectory)
+ {
+ String[] fileList = null;
+ try
+ {
+ File dir = new File(schemaDirectory);
+ if (!(dir.exists()))
+ {
+ return fileList;
+ }
+ if (!(dir.isDirectory()))
+ {
+ fileList = new String[1];
+ fileList[0] = schemaDirectory;
+ return fileList;
+ }
+ // Handling a directory
+ File[] files = dir.listFiles(
+ new FilenameFilter() {
+ public boolean accept(File dir, String name)
+ {String n = name.toLowerCase();
+ return n.endsWith("seed.xml");
+ }
+ });
+ if (files == null)
+ return fileList;
+
+ fileList = new String[files.length];
+ for (int i = 0; i < files.length; i++)
+ {
+ fileList[i] = files[i].getAbsolutePath();
+ }
+ return fileList;
+ }
+ catch (Exception e)
+ {
+ e.printStackTrace();
+ throw new IllegalArgumentException(
+ "Processing the schema-directory " + schemaDirectory
+ + " caused exception "
+ + e.getLocalizedMessage());
+ }
+
+
+ }
+
+
private static String[] getTokens(String _line)
{
if ((_line == null) || (_line.length() == 0))
@@ -351,4 +477,5 @@
return s;
}
+
}
Modified: portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java?view=diff&rev=492423&r1=492422&r2=492423
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java (original)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedSerializerImpl.java Wed Jan 3 22:31:48 2007
@@ -2241,7 +2241,8 @@
*/
private void logMe(String text)
{
- if (log.isDebugEnabled()) log.debug(text);
+ if (log.isDebugEnabled())
+ log.debug(text);
}
/**
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org