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 2006/12/08 21:02:59 UTC
svn commit: r484723 - in /portals/jetspeed-2/trunk/components/serializer: ./
src/java/org/apache/jetspeed/serializer/
src/java/org/apache/jetspeed/serializer/objects/
Author: taylor
Date: Fri Dec 8 12:02:58 2006
New Revision: 484723
URL: http://svn.apache.org/viewvc?view=rev&rev=484723
Log:
https://issues.apache.org/jira/browse/JS2-461
Serializer component
This commit covers all security and admin tables, both XML import and export
Remaining tables to serialize: prefs, registry
Contribution from Hajo Birthelmer (hajo@bluesunrise.com)
Added:
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/objects/JSPWAttributes.java
portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSProcessOrder.java
Modified:
portals/jetspeed-2/trunk/components/serializer/maven.xml
portals/jetspeed-2/trunk/components/serializer/pom.xml
portals/jetspeed-2/trunk/components/serializer/project.xml
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/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSUser.java
Modified: portals/jetspeed-2/trunk/components/serializer/maven.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/maven.xml?view=diff&rev=484723&r1=484722&r2=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/maven.xml (original)
+++ portals/jetspeed-2/trunk/components/serializer/maven.xml Fri Dec 8 12:02:58 2006
@@ -49,7 +49,7 @@
<pathelement path="${maven.build.dest}"/>
<pathelement path="${org.apache.jetspeed.production.jdbc.drivers.path}"/>
</classpath>
- <arg line="-E export.xml -b target/assembly/boot/ -c target/assembly/"/>
+ <arg line="-E c:/temp/export100.xml -b target/assembly/boot/ -c target/assembly/"/>
<sysproperty key="org.apache.jetspeed.database.url" value="${org.apache.jetspeed.production.database.url}"/>
<sysproperty key="org.apache.jetspeed.database.driver" value="${org.apache.jetspeed.production.database.driver}"/>
<sysproperty key="org.apache.jetspeed.database.user" value="${org.apache.jetspeed.production.database.user}"/>
@@ -59,7 +59,57 @@
<preGoal name='export'>
<attainGoal name="java:compile" />
</preGoal>
- <goal name='test2'>
+ <goal name='import'>
+ <copy todir='${maven.build.dir}/classes'
+ file="../../etc/log4j/log4j.properties"/>
+ <copy todir='${maven.build.dir}/classes'>
+ <fileset dir="../../etc/db-ojb/"/>
+ </copy>
+ <attainGoal name='copyAssemblies'/>
+ <java classname="org.apache.jetspeed.serializer.JetspeedSerializerApplication" fork="yes">
+ <classpath>
+ <path refid="maven.dependency.classpath"/>
+ <pathelement path="${maven.build.dest}"/>
+ <pathelement path="${org.apache.jetspeed.production.jdbc.drivers.path}"/>
+ </classpath>
+ <arg line="-I c:/temp/export100.xml -b target/assembly/boot/ -c target/assembly/"/>
+ <sysproperty key="org.apache.jetspeed.database.url" value="${org.apache.jetspeed.production.database.url}"/>
+ <sysproperty key="org.apache.jetspeed.database.driver" value="${org.apache.jetspeed.production.database.driver}"/>
+ <sysproperty key="org.apache.jetspeed.database.user" value="${org.apache.jetspeed.production.database.user}"/>
+ <sysproperty key="org.apache.jetspeed.database.password" value="${org.apache.jetspeed.production.database.password}"/>
+ </java>
+ </goal>
+ <preGoal name='import'>
+ <attainGoal name="java:compile" />
+ </preGoal> <goal name='test2'>
<echo message="${org.apache.jetspeed.production.jdbc.drivers.path}"/>
</goal>
+
+ <goal name='createDB'>
+ <copy todir='${maven.build.dir}/classes'
+ file="../../etc/log4j/log4j.properties"/>
+ <copy todir='${maven.build.dir}/schema'>
+ <fileset dir="../../etc/schema/"/>
+ </copy>
+ <java classname="org.apache.jetspeed.serializer.JetspeedDDLApplication" fork="yes">
+ <classpath>
+ <path refid="maven.dependency.classpath"/>
+ <pathelement path="${maven.build.dest}"/>
+ <pathelement path="${org.apache.jetspeed.production.jdbc.drivers.path}"/>
+ </classpath>
+ <arg line="-I target/schema -R"/>
+ <sysproperty key="org.apache.jetspeed.database.url" value="${org.apache.jetspeed.production.database.url}"/>
+ <sysproperty key="org.apache.jetspeed.database.driver" value="${org.apache.jetspeed.production.database.driver}"/>
+ <sysproperty key="org.apache.jetspeed.database.user" value="${org.apache.jetspeed.production.database.user}"/>
+ <sysproperty key="org.apache.jetspeed.database.password" value="${org.apache.jetspeed.production.database.password}"/>
+ </java>
+ </goal>
+ <preGoal name='export'>
+ <attainGoal name="java:compile" />
+ </preGoal>
+ <goal name='test2'>
+ <echo message="${org.apache.jetspeed.production.jdbc.drivers.path}"/>
+ </goal>
+
+
</project>
Modified: portals/jetspeed-2/trunk/components/serializer/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/pom.xml?view=diff&rev=484723&r1=484722&r2=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/pom.xml (original)
+++ portals/jetspeed-2/trunk/components/serializer/pom.xml Fri Dec 8 12:02:58 2006
@@ -63,6 +63,11 @@
<version>4.0.2</version>
</dependency>
<dependency>
+ <groupId>DdlUtils</groupId>
+ <artifactId>DdlUtils</artifactId>
+ <version>1.0-RC1-PATCHED</version>
+ </dependency>
+ <dependency>
<groupId>${pom.groupId}</groupId>
<artifactId>jetspeed-rdbms</artifactId>
</dependency>
Modified: portals/jetspeed-2/trunk/components/serializer/project.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/project.xml?view=diff&rev=484723&r1=484722&r2=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/project.xml (original)
+++ portals/jetspeed-2/trunk/components/serializer/project.xml Fri Dec 8 12:02:58 2006
@@ -17,7 +17,7 @@
$Id: project.xml 355198 2005-12-08 20:44:03Z rogerrut $
-->
<project>
-<extend>${basedir}/../../jetspeed-components.xml</extend>
+<extend>${basedir}/../../core-build.xml</extend>
<pomVersion>3</pomVersion>
<id>jetspeed-serializer</id>
<name>Jetspeed-2 Serializer</name>
@@ -35,16 +35,10 @@
</developerConnection>
<url>http://svn.apache.org/viewcvs.cgi/portals/jetspeed-2/trunk/components/serializer/</url>
</repository>
-
+
+
<dependencies>
<dependency>
- <id>javolution</id>
- <version>4.0.2</version>
- <properties>
- <war.bundle>true</war.bundle>
- </properties>
- </dependency>
- <dependency>
<id>org.apache.portals.jetspeed-2:jetspeed-commons</id>
<version>${jetspeed.version}</version>
<properties>
@@ -52,13 +46,6 @@
</properties>
</dependency>
<dependency>
- <id>org.apache.portals.jetspeed-2:jetspeed-portal</id>
- <version>${jetspeed.version}</version>
- <properties>
- <war.bundle>true</war.bundle>
- </properties>
- </dependency>
- <dependency>
<id>org.apache.portals.jetspeed-2:jetspeed-cm</id>
<version>${jetspeed.version}</version>
<properties>
@@ -87,5 +74,6 @@
</properties>
</dependency>
</dependencies>
+
</project>
Added: 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=auto&rev=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLApplication.java (added)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLApplication.java Fri Dec 8 12:02:58 2006
@@ -0,0 +1,636 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.jetspeed.serializer;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FilenameFilter;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+
+import javolution.xml.XMLBinding;
+import javolution.xml.XMLObjectReader;
+
+import org.apache.commons.configuration.PropertiesConfiguration;
+import org.apache.ddlutils.model.Database;
+import org.apache.ddlutils.model.Table;
+import org.apache.jetspeed.serializer.objects.JSGroup;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
+/**
+ * Jetspeed Serializer DDL- Application
+ *
+ * invoke with mandatory either
+ * <p>
+ * -I directory or filename of schema files for input, if directory all xml
+ * files will be processed
+ * </p>
+ * and/or
+ * <p>
+ * -O schema file for output log of current database
+ * </p>
+ * and (if -I denotes a directory:)
+ * <p>
+ * -x if directory list provided for input schemas this pattern is excluded
+ * </p>
+ * <p>
+ * -s name of the order file (if schema directory)
+ * </p>
+ *
+ * <p>
+ * note that - if -I and -O are specified, the output file will contain the
+ * UPDATED database
+ * </p>
+ * invoke with (optional) parameters
+ * <p>
+ * -P propertyFileName, for settings
+ * <p>
+ * -R (flag) replace : overwrites default "UPDATE" and clears out the database
+ * before processing (ignored with -O option above)
+ * </p>
+ *
+ * <p>
+ * -dc driverClass, for example com.mysql.jdbc.Driver
+ * </p>
+ * <p>
+ * -ds url, ruls according to the driver used, URL needs to point to the correct
+ * database
+ * </p>
+ * <p>
+ * -du user, user with create/drop etc. rights on the database
+ * </p>
+ * <p>
+ * -dp password
+ * </p>
+ * <p>
+ * -l log4j-level, ERROR (default), WARN, INFO
+ * </p>
+ *
+ * @author <a href="mailto:hajo@bluesunrise.com">Hajo Birthelmer</a>
+ * @version $Id: $
+ */
+public class JetspeedDDLApplication
+{
+ public static final String JNDI_DS_NAME = "jetspeed";
+
+ String propertyFileName = null;
+ String exludeFileName = null;
+ String orderFileName = 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
+ String outputFile = null; // if specified the database schema will be
+ // exported to that file
+ boolean overwrite = false; // default, do not overwrite the database
+ // (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[] filesToProcess = null;
+
+ 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 (driverClass == null)
+ driverClass = System.getProperty(
+ "org.apache.jetspeed.database.driverClass",
+ "com.mysql.jdbc.Driver");
+ if (url == null)
+ url = System.getProperty("org.apache.jetspeed.database.url",
+ "jdbc:mysql://localhost/j2test");
+ if (user == null)
+ user = System.getProperty("org.apache.jetspeed.database.user",
+ "user");
+ if (password == null)
+ password = System.getProperty(
+ "org.apache.jetspeed.database.password", "password");
+
+ if (driverClass == null)
+ throw new IllegalArgumentException(
+ "Can't proceed without a valid driver");
+ if (url == null)
+ throw new IllegalArgumentException(
+ "Can't proceed without a valid url to the target database");
+ if (user == null)
+ throw new IllegalArgumentException(
+ "Can't proceed without a valid database user");
+ return;
+ }
+
+ /**
+ * parse arguments for process instructions, order and exclude files as well as
+ * optional database arguments
+ *
+ */
+ private void parseArguments()
+ {
+ // Parse all the command-Oine arguments
+ for (int n = 0; n < args.length; n++)
+ {
+ if (args[n].equals("-I"))
+ {
+ doImport = true;
+ schemaDirectory = args[++n];
+ } else if (args[n].equals("-O"))
+ {
+ doExport = true;
+ outputFile = args[++n];
+ } else if (args[n].equals("-s"))
+ {
+ orderFileName = args[++n];
+ } else if (args[n].equals("-x"))
+ {
+ exludeFileName = args[++n];
+ } else if (args[n].equals("-R"))
+ overwrite = true;
+ 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 if (args[n].equals("-P"))
+ propertyFileName = args[++n];
+ else if (args[n].equals("-l")) logLevel = args[++n];
+
+ else
+ throw new IllegalArgumentException("Unknown argument: "
+ + args[n]);
+ }
+
+ }
+
+ /**
+ * process provided filename or directory name
+ *
+ * @return one or more files to be processed
+ */
+ private String[] parseFiles()
+ {
+ 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
+ LocalFilenameFilter filter = new LocalFilenameFilter(exludeFileName,orderFileName);
+ File[] files = dir.listFiles(filter);
+ if (files == null)
+ return fileList;
+
+ fileList = new String[files.length];
+ String sortorderFile = filter.getSortFile();
+ if (sortorderFile == null)
+ {
+ for (int i = 0; i < files.length; i++)
+ fileList[i] = files[i].getAbsolutePath();
+ return fileList;
+ }
+ try
+ {
+ ArrayList list = readOrderFile(sortorderFile);
+ fileList = new String[files.length];
+ if ((list == null) || (list.size() == 0))
+ {
+ for (int i = 0; i < files.length; i++)
+ fileList[i] = files[i].getAbsolutePath();
+ return fileList;
+ }
+ String[] tempList = new String[files.length];
+ for (int i = 0; i < files.length; i++)
+ tempList[i] = files[i].getName();
+ Iterator _it = list.iterator();
+ int j = 0;
+ while (_it.hasNext())
+ {
+ String filename = null;
+ try
+ {
+ filename= ((JSGroup)_it.next()).getName();
+ }
+ catch (Exception eeee) {}
+ if (filename != null)
+ {
+ for (int i = 0; i < files.length; i++)
+ {
+ if (filename.equalsIgnoreCase(tempList[i]))
+ {
+ fileList[j++] = files[i].getAbsolutePath();
+ tempList[i] = null;
+ }
+ }
+ }
+ }
+ for (int i = 0; i < files.length; i++)
+ {
+ if (tempList[i] != null)
+ fileList[j++] = files[i].getAbsolutePath();
+ }
+ return fileList;
+ }
+ catch (Exception eee)
+ {
+ eee.printStackTrace();
+ return null;
+ }
+
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ throw new IllegalArgumentException(
+ "Processing the schema-directory " + schemaDirectory
+ + " caused exception "
+ + e.getLocalizedMessage());
+ }
+
+
+ }
+
+ /**
+ * setup environment by processing all arguments and call
+ * requested process routine
+ * @param arguments
+ * @throws Exception
+ */
+ private void processArguments(String[] arguments) throws Exception
+ {
+ this.args = arguments;
+ if (args == null)
+ throw new IllegalArgumentException(
+ "Either a schema directory, a schema file or an output filename have to be defined (-D followed by a driectory, -I or -O followed by the filename");
+
+ parseArguments();
+
+ processPropertyFile();
+
+ checkDBSettings();
+
+
+ /**
+ * The only required argument is the filename for either export or
+ * import
+ */
+ if ((!doImport) && (!doExport))
+ throw new IllegalArgumentException(
+ "Either a schema directory, a schema file or an output filename have to be defined (-I or -O followed by the directory-/filename");
+
+ if (doImport)
+ {
+ filesToProcess = parseFiles();
+ if (filesToProcess == null)
+ return;
+ }
+
+ /** create the instruction map */
+ JetspeedDDLUtil ddlUtil = null;
+
+ HashMap context = new HashMap();
+
+ 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");
+ 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
+ logger.setLevel(Level.ERROR);
+
+ try
+ {
+ ddlUtil = new JetspeedDDLUtil();
+ ddlUtil.startUp();
+ ddlUtil.init(context);
+ } catch (Exception e)
+ {
+ System.err.println("Failed to initialize Utility!!!!!");
+ e.printStackTrace();
+ System.exit(-1);
+ }
+ try
+ {
+ if (doImport) processImport(ddlUtil);
+ if (doExport) processExport(ddlUtil);
+ } catch (Exception e)
+ {
+ System.err.println("Failed to process XML "
+ + (doExport ? "export" : "import") + ":" + e);
+ e.printStackTrace();
+ } finally
+ {
+ try
+ {
+ logger.setLevel(level);
+ if (ddlUtil != null)
+ ddlUtil.tearDown();
+ } catch (Exception e1)
+ {
+ System.out
+ .println("starter framework teardown caused exception "
+ + e1.getLocalizedMessage());
+ e1.printStackTrace();
+
+ }
+ }
+
+
+ }
+
+ /**
+ * create/alter database
+ *
+ * @param ddlUtil
+ */
+ private void processImport(JetspeedDDLUtil ddlUtil)
+ {
+ for (int i = 0; i < filesToProcess.length; i++)
+ {
+ 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...
+ }
+ }
+ }
+
+ /**
+ * read database schema to file
+ *
+ */
+ private void processExport(JetspeedDDLUtil ddlUtil)
+ {
+ //TODO: implement
+ ddlUtil.writeDatabaseSchematoFile(this.outputFile);
+
+ }
+
+ /**
+ * read the property file and read what has not yet been defined
+ */
+ private void processPropertyFile()
+ {
+ /** get system property definition */
+ if (propertyFileName == null)
+ propertyFileName = System.getProperty(
+ "org.apache.jetspeed.xml.ddlUtil.configuration", null);
+
+ if (propertyFileName == null)
+ return;
+ try
+ {
+ configuration = new PropertiesConfiguration(propertyFileName);
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ return;
+ }
+ if (configuration != null)
+ {
+ /** only read what was not defined on the command line */
+
+ if (driverClass == null)
+ driverClass = configuration.getString("driverClass");
+ if (url == null)
+ url = configuration.getString("url");
+ if (user == null)
+ user = configuration.getString("user");
+ if (password == null)
+ password = configuration.getString("password");
+ if (!(doImport))
+ {
+ schemaDirectory = configuration.getString("schema");
+ if (schemaDirectory != null)
+ doImport = true;
+ }
+ if (!(doExport))
+ {
+ outputFile = configuration.getString("outputFile");
+ if (outputFile != null)
+ doExport = true;
+ }
+ if (logLevel == null)
+ logLevel = configuration.getString("loglevel");
+
+ }
+
+ }
+
+
+
+
+ private static String[] getTokens(String _line)
+ {
+ if ((_line == null) || (_line.length() == 0))
+ return null;
+
+ StringTokenizer st = new StringTokenizer(_line, ",");
+ ArrayList list = new ArrayList();
+
+ while (st.hasMoreTokens())
+ list.add(st.nextToken());
+ String[] s = new String[list.size()];
+ for (int i = 0; i < list.size(); i++)
+ s[i] = (String) list.get(i);
+ return s;
+ }
+
+ public List getRows(JetspeedDDLUtil ddlUtil, String tableName)
+ {
+ Table table = ddlUtil.getModel().findTable(tableName,
+ ddlUtil.getPlatform().isDelimitedIdentifierModeOn());
+
+ return ddlUtil.getPlatform().fetch(ddlUtil.getModel(),
+ getSelectQueryForAllString(ddlUtil, table), new Table[]
+ {table});
+ }
+
+ public String getSelectQueryForAllString(JetspeedDDLUtil ddlUtil,
+ Table table)
+ {
+
+ StringBuffer query = new StringBuffer();
+
+ query.append("SELECT * FROM ");
+ if (ddlUtil.getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(ddlUtil.getPlatform().getPlatformInfo()
+ .getDelimiterToken());
+ }
+ query.append(table.getName());
+ if (ddlUtil.getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(ddlUtil.getPlatform().getPlatformInfo()
+ .getDelimiterToken());
+ }
+ System.out.println(query.toString());
+ 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)
+ {
+ XMLObjectReader reader = 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));
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+ try
+ {
+ reader.setBinding(binding);
+ snap = (ArrayList) reader.read("ProcessOrder",
+ ArrayList.class);
+
+ } catch (Exception e)
+ {
+ 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
+ */
+ }
+ }
+ return snap;
+ }
+
+
+
+ class LocalFilenameFilter implements FilenameFilter
+ {
+
+ String exclude = null;
+ String sortFile = null;
+ String sort = null;
+
+ String getSortFile()
+ {
+ return sortFile;
+ }
+ LocalFilenameFilter(String exclude, String sort)
+ {
+ this.exclude = exclude;
+ this.sort = sort;
+
+ }
+ public boolean accept(File dir, String name)
+ {
+ if (exclude != null)
+ if (name.equalsIgnoreCase(exclude))
+ return false;
+ if (sort != null)
+ if (name.equalsIgnoreCase(sort))
+ {
+ sortFile = dir.getAbsolutePath() + "/" + sort;
+ return false;
+ }
+
+ return name.endsWith(".xml");
+ }
+
+ }
+
+
+}
Added: 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=auto&rev=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLUtil.java (added)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/JetspeedDDLUtil.java Fri Dec 8 12:02:58 2006
@@ -0,0 +1,546 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+package org.apache.jetspeed.serializer;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.sql.DataSource;
+
+import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.beanutils.DynaBean;
+import org.apache.commons.beanutils.DynaProperty;
+import org.apache.commons.dbcp.BasicDataSource;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.ddlutils.DatabaseOperationException;
+import org.apache.ddlutils.Platform;
+import org.apache.ddlutils.PlatformFactory;
+import org.apache.ddlutils.PlatformUtils;
+import org.apache.ddlutils.io.DataReader;
+import org.apache.ddlutils.io.DataToDatabaseSink;
+import org.apache.ddlutils.io.DatabaseIO;
+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
+ * <p>
+ * The Jetspeed DDL Utility is capabale of extracting existing schema
+ * information as well as recreating databases.
+ *
+ * @author <a href="mailto:hajo@bluesunrise.com">Hajo Birthelmer</a>
+ * @version $Id: $
+ */
+public class JetspeedDDLUtil
+{
+ 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();
+ public static final String DATASOURCE_USERNAME = "username".intern();
+ public static final String DATASOURCE_PASSWORD = "password".intern();
+
+
+ /** Logger */
+ private static final Log log = LogFactory.getLog(JetspeedDDLUtil.class);
+
+ JdbcTypeCategoryEnum temEnum = null;
+
+ Map parameters;
+
+ PlatformUtils utils;
+
+ StringWriter writer;
+
+ private Platform platform;
+
+ /** The data source to test against. */
+ private DataSource dataSource;
+ /** The database name. */
+ private String _databaseName;
+ /** The database model. */
+ private Database model;
+
+ private boolean connected = false;
+
+ public JetspeedDDLUtil()
+ {
+
+ }
+
+ public void startUp()
+ {
+
+ }
+
+ public void tearDown()
+ {
+ if (connected)
+ {
+ platform = null;
+ // todo: closeup
+ }
+ }
+
+ /**
+ * Tries to determine whether a the jdbc driver and connection url re
+ * supported.
+ *
+ * @param driverName
+ * The fully qualified name of the JDBC driver
+ * @param jdbcConnectionUrl
+ * The connection url
+ * @return True if this driver/url is supported
+ */
+ public boolean isDatabaseSupported(String driverName,
+ String jdbcConnectionUrl)
+ {
+ if (utils.determineDatabaseType(driverName, jdbcConnectionUrl) != null)
+ return true;
+ else
+ return false;
+
+ }
+
+
+
+ /**
+ * Parses the database defined in the given XML file and creates a database
+ * schema (model) object
+ *
+ * @param fileName
+ */
+ public void writeDatabaseSchematoFile(String fileName)
+ {
+ new DatabaseIO().write(model, fileName);
+ }
+
+
+ /**
+ * Parses the database defined in the given XML file and creates a database
+ * schema (model) object
+ *
+ * @param dbDef
+ * The database XML definition
+ * @return The database model
+ */
+ protected Database createDatabaseSchemaFromXML(String fileName)
+ {
+ return new DatabaseIO().read(fileName);
+ }
+
+ /**
+ * Parses the database defined in the given XML definition String and
+ * creates a database schema (model) object
+ *
+ * @param dbDef
+ * The database XML definition
+ * @return The database model
+ */
+ protected Database createDatabaseSchemaFromString(String dbDef)
+ {
+ DatabaseIO dbIO = new DatabaseIO();
+
+ dbIO.setUseInternalDtd(true);
+ dbIO.setValidateXml(false);
+ return dbIO.read(new StringReader(dbDef));
+ }
+
+ /**
+ * <p>
+ * Create a database connection (platform instance) from a data source
+ * </p>
+ *
+ * @param dataSource
+ */
+ protected Platform connectToDatabase(DataSource dataSource)
+ {
+ return PlatformFactory.createNewPlatformInstance(dataSource);
+ }
+
+ /**
+ * <p>
+ * Create a database connection (platform instance) from a (case
+ * insensitive) database type (like MySQL)
+ * </p>
+ *
+ * @param dataSource
+ */
+ protected Platform connectToDatabase(String databaseType)
+ {
+ return PlatformFactory.createNewPlatformInstance(databaseType);
+ }
+ /**
+ * <p>
+ * Update a given database schema to match the schema of targetModel If
+ * alterDB is true, the routine attempts to modify the existing database
+ * shcema while preserving the data (as much as possible). If not, the
+ * existing tables are dropped prior to recreate
+ *
+ * @param targetModel
+ * The new database model
+ * @param alterDb
+ * if true, try to use alter database and preserve data
+ */
+ protected void updateDatabaseSchema(Database targetModel, boolean alterDb)
+ throws SerializerException
+ {
+ try
+ {
+ platform.setSqlCommentsOn(false);
+ try
+ {
+ targetModel.resetDynaClassCache();
+ } catch (Exception internalEx)
+ {
+ internalEx.printStackTrace();
+ }
+ if (alterDb)
+ {
+ model.mergeWith(targetModel);
+ try
+ {
+ platform.alterTables(model, true);
+ }
+ catch (Exception aEX)
+ {
+ log.error(aEX);
+ }
+ } else
+ {
+ try
+ {
+
+// if (log.isDebugEnabled())
+// {
+// String s = platform.getDropTablesSql(model, true);
+// log.debug(s);
+// }
+ platform.dropTables(model, true);
+
+
+
+ }
+ catch (Exception aEX)
+ {
+ log.error(aEX);
+ }
+ try
+ {
+ platform.createTables(targetModel, false, true);
+ }
+ catch (Exception aEX)
+ {
+ log.error(aEX);
+ }
+ }
+ model = this.readModelFromDatabase(null);
+ } catch (Exception ex)
+ {
+ ex.printStackTrace();
+ throw new SerializerException(
+ // TODO: HJB create exception
+ SerializerException.CREATE_OBJECT_FAILED.create(ex.getLocalizedMessage()));
+ }
+ }
+
+ /**
+ * Alter an existing database from the given model. Data is preserved as
+ * much as possible
+ *
+ * @param model
+ * The new database model
+ */
+ public void alterDatabase(Database model) throws SerializerException
+ {
+ updateDatabaseSchema(model, true);
+ }
+
+ /**
+ * Creates a new database from the given model. Note that all data is LOST
+ *
+ * @param model
+ * The new database model
+ */
+ public void createDatabase(Database model) throws SerializerException
+ {
+ updateDatabaseSchema(model, false);
+ }
+
+ /**
+ * <p>
+ * Inserts data into the database. Data is expected to be in the format
+ * </p>
+ * <p>
+ * <?xml version='1.0' encoding='ISO-8859-1'?> <data> <TABLENAME
+ * FIELD1='TEXTVALUE' FIELD2=INTVALUE .... /> <TABLENAME FIELD1='TEXTVALUE'
+ * FIELD2=INTVALUE .... /> </data>
+ * </p>
+ *
+ * @param model
+ * The database model
+ * @param dataXml
+ * The data xml
+ * @return The database
+ */
+ protected Database insertData(Database model, String dataXml)
+ throws DatabaseOperationException
+ {
+ try
+ {
+ DataReader dataReader = new DataReader();
+
+ dataReader.setModel(model);
+ dataReader.setSink(new DataToDatabaseSink(platform, model));
+ dataReader.parse(new StringReader(dataXml));
+ return model;
+ } catch (Exception ex)
+ {
+ throw new DatabaseOperationException(ex);
+ }
+ }
+
+ /**
+ * Drops the tables defined in the database model on this connection.
+ *
+ * @param model
+ * The database model
+ *
+ */
+ protected void dropDatabaseTables(Database model)
+ throws DatabaseOperationException
+ {
+ platform.dropTables(model, true);
+ }
+
+ /**
+ * Reads the database model from a live database.
+ *
+ * @param platform
+ * The physical database connection
+ * @param databaseName
+ * The name of the resulting database
+ * @return The model
+ */
+ public Database readModelFromDatabase(String databaseName)
+ {
+ return platform.readModelFromDatabase(databaseName);
+ }
+
+ /**
+ * datasource.class=org.apache.commons.dbcp.BasicDataSource
+ * datasource.driverClassName=com.mysql.jdbc.Driver
+ * datasource.url=jdbc:mysql://localhost/ddlutils datasource.username=root
+ * datasource.password=root123
+ *
+ */
+
+ /**
+ * Initializes the datasource and the connection (platform)
+ */
+ public void init(Map parameters)
+ {
+ if (connected)
+ tearDown();
+
+ try
+ {
+ String dataSourceClass = (String) parameters.get(DATASOURCE_CLASS);
+ if (dataSourceClass == null)
+ dataSourceClass = BasicDataSource.class.getName();
+
+ dataSource = (DataSource) Class.forName(dataSourceClass)
+ .newInstance();
+
+ for (Iterator it = parameters.entrySet().iterator(); it.hasNext();)
+ {
+ Map.Entry entry = (Map.Entry) it.next();
+ String propName = (String) entry.getKey();
+
+ if (!(propName.equals(DATASOURCE_CLASS)))
+ {
+ BeanUtils.setProperty(dataSource, propName, entry
+ .getValue());
+ }
+ }
+ } catch (Exception ex)
+ {
+ throw new DatabaseOperationException(ex);
+ }
+
+ _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");
+ }
+
+// 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())
+// {
+// platform.setDelimitedIdentifierModeOn(true);
+// }
+
+
+ platform.setDataSource(dataSource);
+
+ model = this.readModelFromDatabase(null);
+/**
+ JdbcModelReader reader = platform.getModelReader();
+ try
+ {
+ model = reader.getDatabase(platform.borrowConnection(), null);
+ } catch (Exception ex)
+ {
+ throw new DatabaseOperationException(ex);
+ }
+*/
+
+ connected = true;
+ }
+
+ /**
+ * Returns the database model.
+ *
+ * @return The model
+ */
+ protected Database getModel()
+ {
+ return model;
+ }
+
+ /**
+ * Inserts data into the database.
+ *
+ * @param dataXml
+ * The data xml
+ * @return The database
+ */
+ protected Database insertData(String dataXml)
+ throws DatabaseOperationException
+ {
+ try
+ {
+ DataReader dataReader = new DataReader();
+
+ dataReader.setModel(model);
+ dataReader.setSink(new DataToDatabaseSink(platform, model));
+ dataReader.parse(new StringReader(dataXml));
+ return model;
+ } catch (Exception ex)
+ {
+ throw new DatabaseOperationException(ex);
+ }
+ }
+
+ /**
+ * Drops the tables defined in the database model.
+ */
+ protected void dropDatabase() throws DatabaseOperationException
+ {
+ platform.dropTables(model, true);
+ }
+
+ /**
+ * Determines the value of the bean's property that has the given name.
+ * Depending on the case-setting of the current builder, the case of teh
+ * name is considered or not.
+ *
+ * @param bean
+ * The bean
+ * @param propName
+ * The name of the property
+ * @return The value
+ */
+ protected Object getPropertyValue(DynaBean bean, String propName)
+ {
+ if (platform.isDelimitedIdentifierModeOn())
+ {
+ return bean.get(propName);
+ } else
+ {
+ DynaProperty[] props = bean.getDynaClass().getDynaProperties();
+
+ for (int idx = 0; idx < props.length; idx++)
+ {
+ if (propName.equalsIgnoreCase(props[idx].getName()))
+ {
+ return bean.get(props[idx].getName());
+ }
+ }
+ throw new IllegalArgumentException(
+ "The bean has no property with the name " + propName);
+ }
+ }
+
+ public DataSource getDataSource()
+ {
+ return dataSource;
+ }
+
+ public Platform getPlatform()
+ {
+ return platform;
+ }
+
+
+
+ public List getRows(String tableName)
+ {
+ Table table = getModel().findTable(tableName, getPlatform().isDelimitedIdentifierModeOn());
+
+ return getPlatform().fetch(getModel(), getSelectQueryForAllString( table), new Table[] { table });
+ }
+
+
+ public String getSelectQueryForAllString( Table table)
+ {
+
+ StringBuffer query = new StringBuffer();
+
+ query.append("SELECT * FROM ");
+ if (getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(getPlatform().getPlatformInfo().getDelimiterToken());
+ }
+ query.append(table.getName());
+ if (getPlatform().isDelimitedIdentifierModeOn())
+ {
+ query.append(getPlatform().getPlatformInfo().getDelimiterToken());
+ }
+ return query.toString();
+ }
+
+
+
+
+}
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=484723&r1=484722&r2=484723
==============================================================================
--- 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 Fri Dec 8 12:02:58 2006
@@ -22,6 +22,8 @@
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.jetspeed.components.jndi.SpringJNDIStarter;
+import org.apache.log4j.Level;
+import org.apache.log4j.Logger;
/**
* Jetspeed Serializer Application
*
@@ -43,12 +45,24 @@
* PROFILE = extract/import profile settings (for export requires USER)
* NOOVERWRITE = don't overwrite existing file (for export)
* BACKUP = backup before process
- *
- * The overall XML file needs to indicate whether passwords used in credentials
- * are plain text or whether they are encoded. The export algoritm can determine -
- * prior to reading users - which encode/decode scheme was used and if <none> or
- * <implements PasswordEncodingService> then we store plain passwords (Note that
- * that alone requires the resulting XML to be encoded!!!!!)
+
+ * <p>
+ * -dc driverClass, for example com.mysql.jdbc.Driver
+ * </p>
+ * <p>
+ * -ds url, ruls according to the driver used, URL needs to point to the correct
+ * database
+ * </p>
+ * <p>
+ * -du user, user with create/drop etc. rights on the database
+ * </p>
+ * <p>
+ * -dp password
+ * </p>
+ *
+ * <p>
+ * -l log4j-level, ERROR (default), WARN, INFO
+ * </p>
*
* @author <a href="mailto:hajo@bluesunrise.com">Hajo Birthelmer</a>
* @version $Id: $
@@ -75,6 +89,13 @@
String defaultIndent = null;
+ String driverClass = null; // jdbc driver
+ String url = null; // jdbc url to database
+ String user = null; // user
+ String password = null; // password
+
+ String logLevel = null;
+
boolean doImport = false;
boolean doExport = false;
@@ -92,7 +113,16 @@
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("-O")) options = 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]);
}
@@ -133,7 +163,19 @@
if (configFiles == null) applicationPath = configuration.getString("configFiles");
if (options == null) applicationPath = configuration.getString("options");
if (defaultIndent == null) applicationPath = configuration.getString("defaultIndent");
-
+
+ if (driverClass == null)
+ driverClass = configuration.getString("driverClass");
+ if (url == null)
+ url = configuration.getString("url");
+ if (user == null)
+ user = configuration.getString("user");
+ if (password == null)
+ password = configuration.getString("password");
+ if (logLevel == null)
+ logLevel = configuration.getString("loglevel");
+
+
}
}
@@ -141,7 +183,8 @@
if (applicationPath == null) applicationPath = "./";
if (bootConfigFiles == null) bootConfigFiles = "assembly/boot/";
if (configFiles == null) configFiles = "assembly/";
-
+ if (logLevel == null) logLevel = "ERROR";
+
bootConfigFiles = bootConfigFiles + "*.xml";
configFiles = configFiles + "*.xml";
@@ -195,10 +238,51 @@
}
}
JetspeedSerializer serializer = null;
+
+ if (driverClass == null)
+ driverClass = System.getProperty(
+ "org.apache.jetspeed.database.driverClass",
+ "com.mysql.jdbc.Driver");
+ if (url == null)
+ url = System.getProperty("org.apache.jetspeed.database.url",
+ "jdbc:mysql://localhost/j2test");
+ if (user == null)
+ user = System.getProperty("org.apache.jetspeed.database.user",
+ "user");
+ if (password == null)
+ password = System.getProperty(
+ "org.apache.jetspeed.database.password", "password");
+
+ if (driverClass == null)
+ throw new IllegalArgumentException(
+ "Can't proceed without a valid driver");
+ if (url == null)
+ throw new IllegalArgumentException(
+ "Can't proceed without a valid url to the target database");
+ if (user == null)
+ throw new IllegalArgumentException(
+ "Can't proceed without a valid database user");
+
+
HashMap context = new HashMap();
-
+ context.put(SpringJNDIStarter.DATASOURCE_DRIVER, driverClass);
+ context.put(SpringJNDIStarter.DATASOURCE_URL, url);
+ context.put(SpringJNDIStarter.DATASOURCE_USERNAME, user);
+ context.put(SpringJNDIStarter.DATASOURCE_PASSWORD, password);
+
+ Logger logger = Logger.getLogger("org.springframework");
+ Level level = logger.getLevel();
+ if (logLevel.equalsIgnoreCase("INFO"))
+ logger.setLevel(Level.INFO);
+ else
+ if (logLevel.equalsIgnoreCase("WARN"))
+ logger.setLevel(Level.WARN);
+ else
+ logger.setLevel(Level.ERROR);
+
+
SpringJNDIStarter starter = new SpringJNDIStarter(context,applicationPath,getTokens(bootConfigFiles),getTokens(configFiles));
System.out.println("starter framework created " + starter);
@@ -237,6 +321,7 @@
try
{
starter.tearDown();
+ logger.setLevel(level);;
}
catch (Exception e1)
{
@@ -249,7 +334,7 @@
}
-
+
private static String[] getTokens(String _line)
{
if ((_line == null) || (_line.length() == 0))
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=484723&r1=484722&r2=484723
==============================================================================
--- 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 Fri Dec 8 12:02:58 2006
@@ -21,7 +21,7 @@
import java.security.Principal;
import java.util.ArrayList;
import java.util.Collection;
-import java.util.Date;
+import java.sql.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -78,6 +78,7 @@
import org.apache.jetspeed.serializer.objects.JSMimeType;
import org.apache.jetspeed.serializer.objects.JSMimeTypes;
import org.apache.jetspeed.serializer.objects.JSNameValuePairs;
+import org.apache.jetspeed.serializer.objects.JSPWAttributes;
import org.apache.jetspeed.serializer.objects.JSPermission;
import org.apache.jetspeed.serializer.objects.JSPermissions;
import org.apache.jetspeed.serializer.objects.JSPrincipalRule;
@@ -564,7 +565,8 @@
*/
private void setSnapshotData()
{
- Date d = new Date();
+ java.util.Date d1 = new java.util.Date();
+ Date d = new Date(d1.getTime());
snapshot.setDateCreated(d.toString());
snapshot.setSavedVersion(JSSnapshot.softwareVersion);
snapshot.setSavedSubversion(JSSnapshot.softwareSubVersion);
@@ -961,8 +963,19 @@
logMe("add User done ");
user = userManager.getUser(jsuser.getName());
}
- else
- {}// we should not touch existing passwords....
+ try
+ {
+ userManager.setPasswordEnabled(jsuser.getName(), jsuser.getPwEnabled());
+ userManager.setPasswordUpdateRequired(jsuser.getName(), jsuser.getPwRequiredUpdate());
+ java.sql.Date d = jsuser.getPwExpirationDate();
+ if (d != null)
+ userManager.setPasswordExpiration(jsuser.getName(), d);
+ }
+ catch (Exception e)
+ {
+ // most likely caused by protected users (like "guest")
+ logMe("setting userinfo for "+ jsuser.getName() + " failed because of " + e.getLocalizedMessage());
+ }
//credentials
Subject subject = user.getSubject();
@@ -1394,6 +1407,8 @@
binding.setAlias(String.class, "String");
binding.setAlias(Integer.class, "int");
+
+ binding.setAlias(JSPWAttributes.class,"credentials");
binding.setClassAttribute(null);
@@ -1569,7 +1584,7 @@
if (credential instanceof PasswordCredential)
{
PasswordCredential pw = (PasswordCredential) credential;
- newUser.setUserCredential(pw.getUserName(), pw.getPassword());
+ newUser.setUserCredential(pw.getUserName(), pw.getPassword(),pw.getExpirationDate(),pw.isEnabled(), pw.isExpired(), pw.isUpdateRequired());
return;
} else if (isPublic)
newUser.addPublicCredential(credential);
Added: portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSPWAttributes.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSPWAttributes.java?view=auto&rev=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSPWAttributes.java (added)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSPWAttributes.java Fri Dec 8 12:02:58 2006
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+package org.apache.jetspeed.serializer.objects;
+
+/**
+ * Serialized Name Value Pairs
+ * <info>
+ * <name>user.first.name</name>
+ * <value>Paul</value>
+ * </info>
+ *
+ * @author <a href="mailto:hajo@bluesunrsie.com">Hajo Birthelmer</a>
+ * @version $Id: $
+ */
+import java.util.HashMap;
+import java.util.Map;
+import java.util.prefs.*;
+
+public class JSPWAttributes extends JSNameValuePairs
+{
+
+
+ public JSPWAttributes()
+ {
+ super();
+ }
+}
Added: portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSProcessOrder.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSProcessOrder.java?view=auto&rev=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSProcessOrder.java (added)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSProcessOrder.java Fri Dec 8 12:02:58 2006
@@ -0,0 +1,94 @@
+/*
+ * Copyright 2000-2004 The Apache Software Foundation.
+ *
+ * Licensed 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.
+ */
+
+package org.apache.jetspeed.serializer.objects;
+
+import java.util.ArrayList;
+
+import org.apache.commons.lang.StringEscapeUtils;
+
+import javolution.xml.XMLBinding;
+import javolution.xml.XMLFormat;
+import javolution.xml.stream.XMLStreamException;
+
+public class JSProcessOrder
+{
+ private JSMimeTypes ordererList;
+
+ public JSProcessOrder()
+ {
+ }
+
+
+ /***************************************************************************
+ * SERIALIZER
+ */
+ private static final XMLFormat XML = new XMLFormat(JSProcessOrder.class)
+ {
+
+ public void write(Object o, OutputElement xml)
+ throws XMLStreamException
+ {
+
+ try
+ {
+ JSProcessOrder g = (JSProcessOrder) o;
+ xml.add(g.getMimeTypes());
+
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+
+ public void read(InputElement xml, Object o)
+ {
+ try
+ {
+ JSProcessOrder g = (JSProcessOrder) o;
+ while (xml.hasNext())
+ {
+ Object o1 = xml.getNext(); // mime
+
+ if (o1 instanceof JSMimeTypes)
+ g.ordererList = (JSMimeTypes) o1;
+ }
+ } catch (Exception e)
+ {
+ e.printStackTrace();
+ }
+ }
+ };
+
+
+ /**
+ * @return Returns the mimeTypes.
+ */
+ public JSMimeTypes getMimeTypes()
+ {
+ return ordererList;
+ }
+
+ /**
+ * @param mimeTypes
+ * The mimeTypes to set.
+ */
+ public void setMimeTypes(JSMimeTypes ordererList)
+ {
+ this.ordererList = ordererList;
+ }
+
+}
Modified: portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSUser.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSUser.java?view=diff&rev=484723&r1=484722&r2=484723
==============================================================================
--- portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSUser.java (original)
+++ portals/jetspeed-2/trunk/components/serializer/src/java/org/apache/jetspeed/serializer/objects/JSUser.java Fri Dec 8 12:02:58 2006
@@ -17,6 +17,7 @@
import java.security.Principal;
import java.util.ArrayList;
+import java.sql.Date;
import java.util.Iterator;
import java.util.prefs.Preferences;
@@ -38,6 +39,8 @@
private char[] password;
+ private JSPWAttributes pwData = null;
+
private ArrayList roles = null;
private ArrayList groups = null;
@@ -101,13 +104,92 @@
return password;
}
- public void setUserCredential(String name, char[] password)
+ public void setUserCredential(String name, char[] password, Date expirationDate, boolean isEnabled, boolean isExpired, boolean requireUpdate)
{
setName(name);
setPassword(password);
-
+ pwData = new JSPWAttributes();
+ if (password != null)
+ {
+ pwData.getMyMap().put("password",this.getPasswordString());
+ if (expirationDate != null)
+ {
+ pwData.getMyMap().put("expirationDate",expirationDate.toString());
+ }
+ pwData.getMyMap().put("enabled",(isEnabled?"TRUE":"FALSE"));
+ pwData.getMyMap().put("requiresUpdate",(requireUpdate?"TRUE":"FALSE"));
+ }
}
+ protected void resetPassword()
+ {
+ try
+ {
+ if (pwData != null)
+ {
+ Object o = pwData.getMyMap().get("password");
+
+ String pw = StringEscapeUtils.unescapeHtml((String)o);
+ if ((pw != null) && (pw.length()>0))
+ password = pw.toCharArray();
+ else
+ password = null;
+ }
+ }
+ catch (Exception e)
+ {
+ password = null;
+ }
+ }
+
+ public boolean getPwEnabled()
+ {
+ return getPWBoolean("enabled",false);
+ }
+ public boolean getPwRequiredUpdate()
+ {
+ return getPWBoolean("requiresUpdate",false);
+ }
+
+
+
+
+
+ public Date getPwExpirationDate()
+ {
+ if (pwData != null)
+ {
+ Object o = pwData.getMyMap().get("expirationDate");
+ if (o == null)
+ return null;
+ if ( o instanceof Date)
+ return (Date)o;
+
+ Date d = Date.valueOf((String)o);
+ return d;
+
+ }
+ return null;
+ }
+
+
+ private boolean getPWBoolean(String property, boolean defaultSetting)
+ {
+ if (pwData == null)
+ return defaultSetting;
+ try
+ {
+ Object o = pwData.getMyMap().get(property);
+ if (o == null)
+ return defaultSetting;
+ return ((String)o).equalsIgnoreCase("TRUE");
+ }
+ catch (Exception e)
+ {
+ return defaultSetting;
+ }
+ }
+
public void setPassword(char[] password)
{
this.password = password;
@@ -228,8 +310,9 @@
String s = g.getName();
if ((s == null) || (s.length() == 0)) s = "guest";
xml.setAttribute("name", s);
- xml.setAttribute("password", g.getPasswordString());
-
+
+
+ xml.add(g.getPwData());
/** named fields HERE */
@@ -255,11 +338,7 @@
{
JSUser g = (JSUser) o;
g.name = StringEscapeUtils.unescapeHtml(xml.getAttribute("name", "unknown"));
- String pw = StringEscapeUtils.unescapeHtml(xml.getAttribute("password",""));
- if ((pw != null) && (pw.length()>0))
- g.password = pw.toCharArray();
- else
- g.password = null;
+
Object o1 = null;
@@ -268,6 +347,13 @@
{
o1 = xml.getNext(); // mime
+
+ if (o1 instanceof JSPWAttributes)
+ {
+ g.pwData = (JSPWAttributes) o1;
+ g.resetPassword();
+ }
+ else
if (o1 instanceof JSUserGroups)
g.groupString = (JSUserGroups) o1;
else
@@ -380,6 +466,16 @@
public JSUserRoles getRoleString()
{
return roleString;
+ }
+
+ public JSPWAttributes getPwData()
+ {
+ return pwData;
+ }
+
+ public void setPwData(JSPWAttributes pwData)
+ {
+ this.pwData = pwData;
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org