|
What this is
Other links
The source code
/*****************************************************************************
* Sun Public License Notice
*
* The contents of this file are subject to the Sun Public License Version
* 1.0 (the "License"). You may not use this file except in compliance with
* the License. A copy of the License is available at http://www.sun.com/
* The Original Code is the CVS Client Library.
* The Initial Developer of the Original Code is Milos Kleint.
* Portions created by Milos Kleint are Copyright (C) 2000.
* All Rights Reserved.
* Contributor(s): Milos Kleint.
*****************************************************************************/
package org.netbeans.lib.cvsclient.commandLine.command;
import java.io.*;
import java.io.PrintStream;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;
import org.netbeans.lib.cvsclient.command.*;
import org.netbeans.lib.cvsclient.command.FileInfoContainer;
import org.netbeans.lib.cvsclient.command.annotate.*;
import org.netbeans.lib.cvsclient.commandLine.*;
import org.netbeans.lib.cvsclient.commandLine.ListenerProvider;
import org.netbeans.lib.cvsclient.event.CVSAdapter;
import org.netbeans.lib.cvsclient.event.CVSListener;
/**
* The locbundlecheck command
* @author Milos Kleint
*/
public class locbundlecheck extends CVSAdapter implements CommandProvider {
/**
* A constructor that is used to create the CommandProvider.
*/
public locbundlecheck() {
}
public String getName() {
return "locbundlecheck"; // NOI18N
}
public String[] getSynonyms() {
return new String[] { "lbch", "lbcheck" }; // NOI18N
}
public String getUsage() {
return ResourceBundle.getBundle(CommandProvider.class.getPackage().getName()+".Bundle").getString("locbundlecheck.usage"); // NOI18N
}
public void printShortDescription(PrintStream out) {
String msg = ResourceBundle.getBundle(CommandProvider.class.getPackage().getName()+".Bundle").getString("locbundlecheck.shortDescription"); // NOI18N
out.print(msg);
}
public void printLongDescription(PrintStream out) {
String msg = ResourceBundle.getBundle(CommandProvider.class.getPackage().getName()+".Bundle").getString("locbundlecheck.longDescription"); // NOI18N
out.println(msg);
}
public Command createCommand(String[] args, int index, GlobalOptions gopt, String workDir) {
LocBundleAnnotateCommand command = new LocBundleAnnotateCommand();
final String getOptString = command.getOptString();
GetOpt go = new GetOpt(args, getOptString + "i:");
int ch = -1;
go.optIndexSet(index);
boolean usagePrint = false;
String arg;
String localization = null;
while ((ch = go.getopt()) != go.optEOF) {
if (ch == 'i') {
localization = go.optArgGet();
command.setLocalization(localization);
} else {
boolean ok = command.setCVSCommand((char)ch, go.optArgGet());
if (!ok) {
usagePrint = true;
}
}
}
if (usagePrint || localization == null) {
throw new IllegalArgumentException(getUsage());
}
int fileArgsIndex = go.optIndexGet();
// test if we have been passed any file arguments
if (fileArgsIndex < args.length) {
Collection fls = new ArrayList();
// send the arguments as absolute paths
if (workDir == null) {
workDir = System.getProperty("user.dir");
}
command.setWorkDir(workDir);
File workingDir = new File(workDir);
for (int i = fileArgsIndex; i < args.length; i++) {
File fl = new File(workingDir, args[i]);
// System.out.println("file=" + fl);
if (fl.exists() && fl.isDirectory()) {
addFilesInDir(fls, fl, localization);
}
else if (fl.exists() && fl.getName().endsWith(".properties"))
{
addFiles(fls, fl, localization);
}
else
{
throw new IllegalArgumentException();
}
}
if (fls.size() > 0)
{
File[] fileArgs = new File[fls.size()];
fileArgs = (File[])fls.toArray(fileArgs);
command.setFiles(fileArgs);
} else {
throw new IllegalArgumentException(ResourceBundle.getBundle("org/netbeans/lib/cvsclient/commandLine/command/Bundle").getString("locbundlecheck.no_file_spec"));
}
}
return command;
}
private static void addFiles(Collection fileList, File origFile, String localization) {
String origPath = origFile.getAbsolutePath();
String enarg = origPath.substring(0, origPath.length() - ".properties".length()) + "_" + localization + ".properties";
//System.out.println("enarg=" + enarg);
File addfl = new File(enarg);
fileList.add(origFile);
if (addfl.exists()) {
fileList.add(addfl);
} else {
//TODO
}
}
private static void addFilesInDir(Collection fileList, File origFile, String localization) {
File[] files = origFile.listFiles();
if (files != null && files.length > 0) {
for (int i = 0; i < files.length; i++) {
if (files[i].exists() && files[i].isDirectory())
{
addFilesInDir(fileList, files[i], localization);
} else if (files[i].exists() && "Bundle.properties".equals(files[i].getName())) {
addFiles(fileList, files[i], localization);
}
}
}
}
private PrintStream out;
private PrintStream err;
private int realEnd = 0;
private HashMap originalBundles;
private HashMap localizedBundles;
private String local;
private String workDir;
/**
* A constructor that is used to create the CVSAdapter.
*/
locbundlecheck(PrintStream stdout, PrintStream stderr, String localization, String workDir)
{
out = stdout;
err = stderr;
originalBundles = new HashMap();
localizedBundles = new HashMap();
local = localization;
this.workDir = workDir;
}
public void fileInfoGenerated(org.netbeans.lib.cvsclient.event.FileInfoEvent e) {
// out.println("annotated " + e.getInfoContainer().getFile());
FileInfoContainer cont = e.getInfoContainer();
if (cont.getFile().getName().indexOf("_" + local) >= 0) {
localizedBundles.put(cont.getFile().getAbsolutePath(), cont);
} else {
originalBundles.put(cont.getFile().getAbsolutePath(), cont);
}
// out.println("orig size=" + originalBundles.keySet().size() + " loc size=" + localizedBundles.keySet().size());
if (realEnd == 2) {
// generate output.
// out.println("generating output....");
generateOutput();
}
}
public void commandTerminated(org.netbeans.lib.cvsclient.event.TerminationEvent e) {
if (realEnd == 0) {
// now the event is triggered because of the validresponses request
realEnd = 1;
return;
}
realEnd = 2;
// the second time it's the real end. waiting for the last info object to be received.
// out.println("finish=" + e.isError());
}
private void generateOutput() {
Iterator it = originalBundles.keySet().iterator();
while (it.hasNext())
{
String origPath = (String)it.next();
int dotIndex = origPath.lastIndexOf(".");
if (dotIndex < 0) {
throw new IllegalStateException(ResourceBundle.getBundle("org/netbeans/lib/cvsclient/commandLine/command/Bundle").getString("locbundlecheck.illegal_state"));
}
String locPath = origPath.substring(0, dotIndex) + "_" + local + origPath.substring(dotIndex);
// System.out.println("locpath=" + locPath);
AnnotateInformation origInfo = (AnnotateInformation)originalBundles.get(origPath);
AnnotateInformation locInfo = (AnnotateInformation)localizedBundles.get(locPath);
if (locInfo == null) {
out.println(MessageFormat.format(ResourceBundle.getBundle("org/netbeans/lib/cvsclient/commandLine/command/Bundle").getString("locbundlecheck.noLocalizedFile"),
new Object[] {origPath}));
continue;
}
// remove from locl bundles to figure out what was removed in the original..
localizedBundles.remove(locPath);
HashMap origPropMap = createPropMap(origInfo);
HashMap locPropMap = createPropMap(locInfo);
String printFile = origPath;
if (origPath.startsWith(workDir)) {
printFile = origPath.substring(workDir.length());
if (printFile.startsWith("/") || printFile.startsWith("\\") ) {
printFile = printFile.substring(1);
}
}
out.println(MessageFormat.format(ResourceBundle.getBundle("org/netbeans/lib/cvsclient/commandLine/command/Bundle").getString("locbundlecheck.File"),
new Object[] {printFile}));
Iterator propIt = origPropMap.keySet().iterator();
while (propIt.hasNext()) {
String prop = (String)propIt.next();
AnnotateLine origLine = (AnnotateLine)origPropMap.get(prop);
AnnotateLine locLine = (AnnotateLine)locPropMap.get(prop);
if (locLine == null) {
out.println(MessageFormat.format(ResourceBundle.getBundle("org/netbeans/lib/cvsclient/commandLine/command/Bundle").getString("locbundlecheck.propMissing"),
new Object[] {prop}));
continue;
}
// System.out.println("prop=" + prop);
// System.out.println("orig date:" + origLine.getDate());
// System.out.println("loc date:" + locLine.getDate());
if (origLine.getDate().compareTo(locLine.getDate()) > 0) {
out.println(MessageFormat.format(ResourceBundle.getBundle("org/netbeans/lib/cvsclient/commandLine/command/Bundle").getString("locbundlecheck.prop_updated"),
new Object[] {prop}));
}
}
}
if (localizedBundles.size() > 0) {
Iterator locIt = localizedBundles.keySet().iterator();
while (locIt.hasNext()) {
String prop = (String)locIt.next();
out.println(MessageFormat.format(ResourceBundle.getBundle("org/netbeans/lib/cvsclient/commandLine/command/Bundle").getString("locbundlecheck.prop_removed"),
new Object[] {prop}));
}
}
}
private HashMap createPropMap(AnnotateInformation info) {
HashMap propMap = new HashMap();
AnnotateLine line = info.getFirstLine();
while (line != null) {
String content = line.getContent();
if (content.startsWith("#")) {
// ignore commented lines.
line = info.getNextLine();
continue;
}
int index = content.indexOf('=');
if (index > 0) {
String key = content.substring(0, index);
propMap.put(key, line);
} else {
//TODO.. for properties that span across multiple lines, one should take all lines into account
}
line = info.getNextLine();
}
return propMap;
}
private static class LocBundleAnnotateCommand extends AnnotateCommand implements ListenerProvider {
private String loc;
private String workDir;
public CVSListener createCVSListener(PrintStream stdout, PrintStream stderr) {
return new locbundlecheck(stdout, stderr, loc, workDir);
}
public void setLocalization(String loc) {
this.loc = loc;
}
public void setWorkDir(String dir) {
workDir = dir;
}
}
}
|
| ... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.