Author: scabanovich
Date: 2009-10-23 07:19:32 -0400 (Fri, 23 Oct 2009)
New Revision: 18257
Added:
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/JarVersionObserver.java
Modified:
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/ProjectTemplatesPlugin.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-5072
Added:
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/JarVersionObserver.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/JarVersionObserver.java
(rev 0)
+++
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/JarVersionObserver.java 2009-10-23
11:19:32 UTC (rev 18257)
@@ -0,0 +1,110 @@
+/*******************************************************************************
+ * Copyright (c) 2007 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at
http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.common.projecttemplates;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ *
+ * @author Viacheslav Kabanovich
+ *
+ */
+public class JarVersionObserver {
+ static String JAR_SUFFIX = ".jar"; //$NON-NLS-1$
+ File folder;
+ Set<File> existedJars = new HashSet<File>();
+ Map<File, JarVersionObserver> children = new HashMap<File,
JarVersionObserver>();
+
+ public JarVersionObserver(File f) {
+ folder = f;
+ init();
+ }
+
+ public boolean containsJars() {
+ return !existedJars.isEmpty() || !children.isEmpty();
+ }
+
+ private void init() {
+ if(!folder.isDirectory()) return;
+ File[] fs = folder.listFiles();
+ if(fs == null) return;
+ for (File f: fs) {
+ if(f.isDirectory()) {
+ JarVersionObserver c = new JarVersionObserver(f);
+ if(!c.containsJars()) continue;
+ children.put(f, c);
+ } else if(f.isFile()) {
+ String n = f.getName();
+ if(n.toLowerCase().endsWith(JAR_SUFFIX)) {
+ existedJars.add(f);
+ }
+ }
+ }
+ }
+
+ public void execute() {
+ File[] fs = folder.listFiles();
+ if(fs == null) return;
+ Set<File> oldJars = new HashSet<File>();
+ Set<File> newJars = new HashSet<File>();
+ for (File f: fs) {
+ if(f.isDirectory()) {
+ JarVersionObserver c = children.get(f);
+ if(c != null) c.execute();
+ } else if(f.isFile()) {
+ String n = f.getName();
+ if(n.toLowerCase().endsWith(JAR_SUFFIX)) {
+ if(!existedJars.contains(f)) {
+ newJars.add(f);
+ } else {
+ oldJars.add(f);
+ }
+ }
+ }
+ }
+ filter(oldJars, newJars);
+ }
+
+ public void filter(Set<File> oldJars, Set<File> newJars) {
+ if(oldJars.isEmpty() || newJars.isEmpty()) return;
+ for (File f: newJars) {
+ String n1 = f.getName().substring(0, f.getName().length() - JAR_SUFFIX.length());
+ Iterator<File> it = oldJars.iterator();
+ while(it.hasNext()) {
+ File o = it.next();
+ String n2 = o.getName().substring(0, o.getName().length() - JAR_SUFFIX.length());
+ if(areEqualNamesOfDifferentVersions(n1, n2)) {
+ it.remove();
+ o.delete();
+ }
+ }
+ }
+ }
+
+ static boolean areEqualNamesOfDifferentVersions(String n1, String n2) {
+ int d1 = n1.lastIndexOf('-');
+ int d2 = n2.lastIndexOf('-');
+ String base1 = d1 < 0 ? n1 : n1.substring(0, d1);
+ String base2 = d2 < 0 ? n2 : n2.substring(0, d2);
+ if(!base1.equals(base2)) return false;
+ String regex = "([0-9]+\\.)+([^\\.]+)"; //$NON-NLS-1$
+ boolean isVersion1 = d1 < 0 || n1.substring(d1 + 1).matches(regex);
+ boolean isVersion2 = d2 < 0 || n2.substring(d2 + 1).matches(regex);
+
+ return isVersion1 && isVersion2;
+ }
+
+}
Property changes on:
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/JarVersionObserver.java
___________________________________________________________________
Name: svn:mime-type
+ text/plain
Modified:
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/ProjectTemplatesPlugin.java
===================================================================
---
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/ProjectTemplatesPlugin.java 2009-10-23
08:37:21 UTC (rev 18256)
+++
trunk/common/plugins/org.jboss.tools.common.projecttemplates/src/org/jboss/tools/common/projecttemplates/ProjectTemplatesPlugin.java 2009-10-23
11:19:32 UTC (rev 18257)
@@ -50,7 +50,8 @@
void copyProjectTemplates() throws IOException {
Bundle bundle = Platform.getBundle(PLUGIN_ID);
File location = Platform.getStateLocation(bundle).toFile();
- File install = FileLocator.getBundleFile(bundle);
+ File install = FileLocator.getBundleFile(bundle);
+ JarVersionObserver jarVersionObserver = new JarVersionObserver(location);
if(install.isDirectory()) {
FileFilter filter = new FileFilter() {
public boolean accept(File pathname) {
@@ -59,6 +60,7 @@
&& !".svn".equalsIgnoreCase(pathname.getName()); //$NON-NLS-1$
}
};
+
copy(location, install, "templates", filter); //$NON-NLS-1$
copy(location, install, "lib", filter); //$NON-NLS-1$
} else {
@@ -66,6 +68,7 @@
unzip.execute(location, "templates.*"); //$NON-NLS-1$
unzip.execute(location, "lib.*"); //$NON-NLS-1$
}
+ jarVersionObserver.execute();
}
private void copy(File location, File install, String name, FileFilter filter) {