package journal.action; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Properties; import jargs.gnu.CmdLineParser; import journal.reader.Options; import journal.schema.TableVersion; public class ClientUserRenamer extends BaseRenamerAction { boolean renameUser; boolean renameClient; String fileName = ""; @Override public void start(Options options) throws Exception { super.start(options); // need to rethink the whole option vs command line arguments issue. } @Override public void help() { System.err.println("\t--action journal.action.ClientUserRenamer -- <options>"); System.err.println("\t\tOptions are\n"); System.err.println("\t\t-c --client"); System.err.println("\t\t-u --user"); System.err.println("\t\t-o --oldName[=]<old-name> -n --newName[=]<new-name>"); System.err.println("\t\t-f --fileName[=]<file-name> # format: oldname=newname"); System.err.println("\t\t-p --patch"); } @Override public void finish() throws Exception { } @Override public String[] parseArgs(String[] args) { CmdLineParser parser = new CmdLineParser(); CmdLineParser.Option oldNameOption = parser.addStringOption('o', "oldName"); CmdLineParser.Option newNameOption = parser.addStringOption('n', "newName"); CmdLineParser.Option fileNameOption = parser.addStringOption('f', "fileName"); CmdLineParser.Option patchOption = parser.addBooleanOption('p', "patch"); CmdLineParser.Option userOption = parser.addBooleanOption('u', "user"); CmdLineParser.Option clientOption = parser.addBooleanOption('c', "client"); try { parser.parse(args); } catch ( CmdLineParser.OptionException e ) { System.err.println(e.getMessage()); help(); System.exit(2); } String oldName = (String) parser.getOptionValue(oldNameOption, ""); String newName = (String) parser.getOptionValue(newNameOption, ""); fileName = (String) parser.getOptionValue(fileNameOption, fileName); this.patch = (Boolean) parser.getOptionValue(patchOption, Boolean.FALSE); this.renameUser = (Boolean) parser.getOptionValue(userOption, Boolean.FALSE); this.renameClient = (Boolean) parser.getOptionValue(clientOption, Boolean.FALSE); // verify that the correct options match up if( !renameUser && !renameClient ) { throw new IllegalArgumentException("Need to specify at least one of [--user|--client]"); } if( fileName.equals("") ) { if( oldName.equals("") || newName.equals("")) { throw new IllegalArgumentException("Need to specify either filename or old and new name"); } renameMap.put(oldName, newName); } else { try { readFile(fileName); } catch(IOException e) { throw new IllegalArgumentException("Illegal filename", e); } } return parser.getRemainingArgs(); } private void readFile(final String fileName) throws IOException { Properties p = new Properties(); FileReader r = new FileReader(fileName); p.load(r); for (Enumeration<?> propNames = p.propertyNames(); propNames.hasMoreElements(); ) { String name = (String) propNames.nextElement(); renameMap.put(name, p.getProperty(name)); } } RenameAction getAction(TableVersion version) { if( !actionMap.containsKey(version)) { RenameAction action = EmptyAction.instance; List<RenameAction> list = new ArrayList<RenameAction>(); if( renameClient ) { if( version.getAttributeByName("client") != null ) { list.add( new SimpleRenameAction("client") ); } if( version.getAttributeByName("cfile") != null) { list.add( new FileRenameAction("cfile")); } if( version.getTable().getName().equals("db.view")) { list.add( new SimpleRenameAction("name")); list.add( new FileRenameAction("vfile")); } if( version.getTable().getName().equals("db.domain")) { list.add( new SimpleRenameAction("name")); } } if( renameUser ) { if( version.getAttributeByName("user") != null ) { list.add( new SimpleRenameAction("user") ); } if( version.getAttributeByName("owner") != null ) { list.add( new SimpleRenameAction("owner") ); } } if( list.size() == 1 ) { action = list.get(0); } else if ( list.size() > 1 ) { action = new CompoundActions(list); } actionMap.put(version, action); } return actionMap.get(version); } }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#5 | 8016 | Sven Erik Knop | In the middle of refactoring the Renamer classes into the BaseRenamer. | ||
#4 | 8015 | Sven Erik Knop | Now with counter reestablished. | ||
#3 | 8014 | Sven Erik Knop |
Extracted a base class. Not quite finished since I need a counter class as well. |
||
#2 | 8013 | Sven Erik Knop |
Rewrite of ClientUserRenamer. Now based on a saner model using a set of Actions instead of lots of state variables. Note that the counter currently does not work and simply returns 0 changes. |
||
#1 | 8012 | Sven Erik Knop | Rename Renamer to ClientUserRenamer for clarification. | ||
//guest/sven_erik_knop/java/JournalReader/src/journal/action/Renamer.java | |||||
#3 | 7823 | Sven Erik Knop |
Updated the Renamer tool to solve the problem that owners of specs such as labels and client workspaces wouldn't get updated. Jar file with updated version submitted as well. |
||
#2 | 7626 | Sven Erik Knop |
Removed obsolete imports. Added jar file manifest to build.xml |
||
#1 | 7527 | Sven Erik Knop |
JournalReader, now in its proper place. Documentation to follow. |