Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataList.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataList.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataList.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataList.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,101 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.symbols; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +import org.apache.shale.clay.config.beans.ComponentBean; +import org.apache.shale.clay.config.beans.SymbolBean; + +import clay_plugin.editor.ComponentEditedListener; + +public class SymbolsMetadataList { + + private ComponentBean component; + + private Set changeListeners = new HashSet(); + + private ComponentEditedListener listener = null; + + public SymbolsMetadataList(ComponentEditedListener listener, + ComponentBean component) { + this.listener = listener; + this.component = component; + } + + public void removeChangeListener(SymbolsMetadataViewer viewer) { + changeListeners.remove(viewer); + } + + public void addChangeListener(SymbolsMetadataViewer viewer) { + changeListeners.add(viewer); + } + + public void addSymbol() { + SymbolBean s = new SymbolBean(); + s.setName(createSymbolName()); + s.setValue(""); + component.addSymbol(s); + Iterator iterator = changeListeners.iterator(); + while (iterator.hasNext()) + ((SymbolsMetadataViewer) iterator.next()).addSymbol(s); + + listener.componentEdited(component); + } + + public void removeSymbol(SymbolBean symbol) { + component.getSymbols().remove(symbol.getName().toLowerCase()); + Iterator iterator = changeListeners.iterator(); + while (iterator.hasNext()) + ((SymbolsMetadataViewer) iterator.next()).removeSymbol(symbol); + + listener.componentEdited(component); + } + + public void updateSymbol(String oldName, SymbolBean symbol) { + if (oldName != null) { + component.getSymbols().remove(oldName.toLowerCase()); + } + + component.getSymbols().put(symbol.getName(), symbol); + Iterator iterator = changeListeners.iterator(); + while (iterator.hasNext()) + ((SymbolsMetadataViewer) iterator.next()).updateSymbol(symbol); + + listener.componentEdited(component); + } + + protected String createSymbolName() { + StringBuffer symbolName = new StringBuffer(); + symbolName.append("symbol"); + int suffix = 1; + int start = symbolName.length(); + symbolName.append(suffix); + while (component.getSymbols().containsKey( + symbolName.toString().toLowerCase())) { + symbolName = symbolName.delete(start, symbolName.length()); + suffix++; + symbolName.append(suffix); + + } + return symbolName.toString(); + } + +}
Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataList.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataViewer.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataViewer.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataViewer.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataViewer.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,30 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.symbols; + +import org.apache.shale.clay.config.beans.SymbolBean; + +public interface SymbolsMetadataViewer { + + public void addSymbol(SymbolBean symbol); + + public void removeSymbol(SymbolBean symbol); + + public void updateSymbol(SymbolBean symbol); + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/symbols/SymbolsMetadataViewer.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/AbstractXMLVisitor.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/AbstractXMLVisitor.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/AbstractXMLVisitor.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/AbstractXMLVisitor.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; + +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceVisitor; +import org.eclipse.core.runtime.CoreException; + +public abstract class AbstractXMLVisitor implements IResourceVisitor { + + public abstract boolean visit(IResource resource) throws CoreException; + + public void visitJar(File resource) { + + try { + ZipFile zipFile = new ZipFile(resource); + + Enumeration entries = zipFile.entries(); + + while (entries.hasMoreElements()) { + ZipEntry entry = (ZipEntry) entries.nextElement(); + + if (entry.isDirectory()) { + continue; + } + + if (entry.getName().endsWith(".xml")) { + + URL jarEntryUrl = JarUtils.getJarEntryURL(resource, entry); + + visitXML(resource, jarEntryUrl); + } + + } + + } catch (ZipException e) { + // TODO Auto-generated catch block + + } catch (IOException e) { + // TODO Auto-generated catch block + + } + + } + + public void visitJar(IResource resource) { + visitJar(resource.getLocation().toFile()); + } + + public abstract void visitXML(File resource, URL url); + + public abstract void visitXML(IResource resource, URL url); + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/AbstractXMLVisitor.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ArrayUtils.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ArrayUtils.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ArrayUtils.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ArrayUtils.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +/** + * @author rwynn Utility methods for arrays + */ +public class ArrayUtils { + + public static Object[] concat(Object[] a1, Object[] a2) { + Object[] result = new Object[a1.length + a2.length]; + System.arraycopy(a1, 0, result, 0, a1.length); + System.arraycopy(a2, 0, result, a1.length, a2.length); + return result; + } + + public static Object concat(Object[] a1, Object[] a2, Object[] a3) { + Object[] a2a3 = (Object[]) ArrayUtils.concat(a2, a3); + return ArrayUtils.concat(a1, a2a3); + } + + public static String[] concat(String[] a1, String[] a2) { + String[] result = new String[a1.length + a2.length]; + System.arraycopy(a1, 0, result, 0, a1.length); + System.arraycopy(a2, 0, result, a1.length, a2.length); + return result; + } + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ArrayUtils.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayResourceDeltaVisitor.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayResourceDeltaVisitor.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayResourceDeltaVisitor.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayResourceDeltaVisitor.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,87 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.IResourceDelta; +import org.eclipse.core.resources.IResourceDeltaVisitor; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.gef.ui.palette.PaletteViewer; + +import clay_plugin.editor.VisualEditorViewer; +import clay_plugin.jobs.ClaySearchJob; +import clay_plugin.jobs.EditorListener; + +public class ClayResourceDeltaVisitor implements IResourceDeltaVisitor { + + private PaletteViewer paletteViewer; + + private VisualEditorViewer viewer; + + public ClayResourceDeltaVisitor(VisualEditorViewer viewer, + PaletteViewer paletteViewer) { + this.viewer = viewer; + this.paletteViewer = paletteViewer; + } + + public boolean visit(IResourceDelta delta) throws CoreException { + + IResource resource = delta.getResource(); + + if (resource instanceof IFile) { + + if (!resource.isDerived()) { + + if ("xml".equalsIgnoreCase(resource.getFileExtension()) + || "jar".equalsIgnoreCase(resource.getFileExtension())) { + + ClaySearchJob job = new ClaySearchJob( + resource.getProject(), "Updating Clay Components"); + job.addJobChangeListener(new EditorListener(viewer, + paletteViewer)); + job.schedule(); + + } + } + + return false; + } + + else if (resource instanceof IProject) { + if (delta.getKind() == IResourceDelta.REMOVED) { + + ClaySearchJob job = new ClaySearchJob(resource.getProject(), + "Updating Clay Components"); + job.addJobChangeListener(new EditorListener(viewer, + paletteViewer)); + job.schedule(); + + return false; + + } else { + return true; + } + + } else { + return true; + } + } + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayResourceDeltaVisitor.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLResourceChangeListener.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLResourceChangeListener.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLResourceChangeListener.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLResourceChangeListener.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import org.eclipse.core.resources.IResourceChangeEvent; +import org.eclipse.core.resources.IResourceChangeListener; +import org.eclipse.core.resources.IResourceDelta; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.gef.ui.palette.PaletteViewer; + +import clay_plugin.editor.VisualEditorViewer; + +public class ClayXMLResourceChangeListener implements IResourceChangeListener { + + private PaletteViewer paletteViewer; + + private VisualEditorViewer viewer; + + public ClayXMLResourceChangeListener(VisualEditorViewer viewer, PaletteViewer paletteViewer) { + this.viewer = viewer; + this.paletteViewer = paletteViewer; + } + + public void resourceChanged(IResourceChangeEvent event) { + + IResourceDelta delta = event.getDelta(); + + try { + delta.accept(new ClayResourceDeltaVisitor(viewer, paletteViewer)); + + } catch (CoreException e) { + + + } + + } + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLResourceChangeListener.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLVisitor.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLVisitor.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLVisitor.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLVisitor.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,153 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; + +import org.apache.shale.clay.config.ClayConfigParser; +import org.apache.shale.clay.config.ClayXmlParser; +import org.apache.shale.clay.config.beans.ComponentConfigBean; +import org.apache.shale.clay.config.beans.ConfigBean; +import org.eclipse.core.resources.IProject; +import org.eclipse.core.resources.IResource; +import org.xml.sax.SAXException; + +import clay_plugin.ext.ComponentConfigBeanExt; +import clay_plugin.model.ClayXMLModel; + +public class ClayXMLVisitor extends AbstractXMLVisitor { + + private ClayXMLModel model; + + private IProject project; + + public ClayXMLVisitor(IProject project, ClayXMLModel model) { + + this.model = model; + + this.project = project; + + } + + public boolean visit(File resource) { + + if (resource.isDirectory()) { + File[] children = resource.listFiles(); + for (int j = 0; j < children.length; ++j) { + visit(children[j]); + } + } + + if (resource.getName().endsWith(".jar")) { + visitJar(resource); + + } else if (resource.getName().endsWith(".xml")) { + + try { + visitXML(resource, resource.toURL()); + + } catch (MalformedURLException e) { + + } + } + + return false; + + } + + public void visitXML(File resource, URL url) { + + try { + ClayConfigParser parser = getParser(); + + parser.loadConfigFile(url, null); + + ComponentConfigBeanExt added = (ComponentConfigBeanExt) parser + .getConfig(); + + model.mergeConfig(project, added); + + } catch (IOException e) { + + } catch (SAXException e) { + + } + + } + + public boolean visit(IResource resource) { + + if (resource.getType() != IResource.FILE) { + return true; + } + + String ext = resource.getFileExtension(); + + if ("jar".equalsIgnoreCase(ext)) { + visitJar(resource); + + } else if ("xml".equalsIgnoreCase(ext)) { + + try { + visitXML(resource, resource.getLocation().toFile().toURL()); + + } catch (MalformedURLException e) { + + } + } + + return false; + + } + + public void visitXML(IResource resource, URL url) { + + try { + ClayConfigParser parser = getParser(); + + parser.loadConfigFile(url, null); + + ComponentConfigBeanExt added = (ComponentConfigBeanExt) parser + .getConfig(); + + model.mergeConfig(resource, added); + + } catch (IOException e) { + + } catch (SAXException e) { + + } + + } + + protected ClayConfigParser getParser() { + ClayConfigParser parser = new ClayXmlParser(); + parser.setConfig(getConfigBean()); + return parser; + } + + protected ConfigBean getConfigBean() { + ComponentConfigBean configBean = new ComponentConfigBeanExt(); + configBean.setDesigntime(true); + return configBean; + } + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/ClayXMLVisitor.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/CloneUtil.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/CloneUtil.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/CloneUtil.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/CloneUtil.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,88 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +import org.eclipse.core.resources.ResourcesPlugin; + +public class CloneUtil { + + public static Object clone(Serializable obj) { + + ObjectOutputStream oos = null; + ObjectInputStream ois = null; + Object clone = null; + + try { + File workspace = ResourcesPlugin.getWorkspace().getRoot() + .getLocation().toFile(); + + File temp = File.createTempFile("clone", "bin", workspace); + + temp.deleteOnExit(); + + oos = new ObjectOutputStream(new FileOutputStream(temp)); + + oos.writeObject(obj); + + oos.flush(); + + oos.close(); + + ois = new ObjectInputStream(new FileInputStream(temp)); + + clone = ois.readObject(); + + ois.close(); + + temp.delete(); + + } + + catch (Exception e) { + + + + } finally { + + if (oos != null) { + try { + oos.close(); + } catch (Exception e1) { + } + } + + if (ois != null) { + try { + ois.close(); + } catch (Exception e2) { + } + } + + } + + return clone; + + } +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/CloneUtil.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/FacesConfigVisitor.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/FacesConfigVisitor.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/FacesConfigVisitor.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/FacesConfigVisitor.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,95 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; + +import org.eclipse.core.resources.IResource; + +import clay_plugin.faces.FacesConfigModel; +import clay_plugin.faces.FacesConfigParser; +import clay_plugin.faces.ManagedBean; + +public class FacesConfigVisitor extends AbstractXMLVisitor { + + protected FacesConfigModel model; + + public FacesConfigVisitor(FacesConfigModel model) { + this.model = model; + } + + public void visitXML(File resource, URL url) { + // TODO Auto-generated method stub + + } + + public boolean visit(IResource resource) { + + if (resource.getType() != IResource.FILE) { + return true; + } + + String ext = resource.getFileExtension(); + + if ("jar".equalsIgnoreCase(ext)) { + visitJar(resource); + + } else if ("xml".equalsIgnoreCase(ext)) { + + try { + visitXML(resource, resource.getLocation().toFile().toURL()); + + } catch (MalformedURLException e) { + + + } + } + + return false; + + } + + public void visitXML(IResource resource, URL url) { + + try { + FacesConfigParser parser = getParser(url); + + ManagedBean[] beans = parser.parse(); + + model.addManagedBeans(resource, beans); + + } catch (Exception e) { + + + } + + } + + protected FacesConfigParser getParser(URL url) { + return new FacesConfigParser(url); + } + + public FacesConfigModel getModel() { + return model; + } + + + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/FacesConfigVisitor.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/JarUtils.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/JarUtils.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/JarUtils.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/JarUtils.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,48 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.zip.ZipEntry; + +import org.eclipse.core.resources.IResource; + +public class JarUtils { + + public static URL getJarEntryURL(IResource jar, ZipEntry entry) { + + return getJarEntryURL(jar.getLocation().toFile(), entry); + + } + + public static URL getJarEntryURL(File jar, ZipEntry entry) { + + try { + return new URL("jar:file:" + jar.getAbsolutePath() + "!/" + + entry.getName()); + } catch (MalformedURLException e) { + + + return null; + } + + } + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/JarUtils.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/PaletteDrawers.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/PaletteDrawers.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/PaletteDrawers.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/PaletteDrawers.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,309 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +import org.apache.shale.clay.config.beans.ComponentBean; +import org.eclipse.gef.SharedImages; +import org.eclipse.gef.palette.CreationToolEntry; +import org.eclipse.gef.palette.PaletteDrawer; +import org.eclipse.gef.palette.ToolEntry; + +import clay_plugin.ext.ComponentConfigBeanExt; + +public class PaletteDrawers { + + private ComponentConfigBeanExt config; + + private PaletteDrawer abstractDrawer; + + private PaletteDrawer otherDrawer; + + private PaletteDrawer shaleDrawer; + + private PaletteDrawer inputDrawer; + + private PaletteDrawer outputDrawer; + + private PaletteDrawer dataDrawer; + + private PaletteDrawer commandDrawer; + + private PaletteDrawer validatorDrawer; + + private PaletteDrawer converterDrawer; + + private PaletteDrawer tomahawkDrawer; + + private PaletteDrawer ibmDrawer; + + + private List drawerList; + + public PaletteDrawers(ComponentConfigBeanExt config) { + this.config = config; + } + + public List getDrawers() { + + Iterator i = config.getSortedElements().iterator(); + while (i.hasNext()) { + + ComponentBean next = (ComponentBean) i.next(); + + ToolEntry entry = new CreationToolEntry(next.getJsfid(), next + .getDescription(), null, + SharedImages.DESC_SELECTION_TOOL_16, + SharedImages.DESC_SELECTION_TOOL_16); + + String componentType = getComponentType(next); + + if (detectValidator(next)) { + getValidatorDrawer().add(entry); + } + + else if (detectConverter(next)) { + getConverterDrawer().add(entry); + } + + else if (componentType == null) { + getOtherDrawer().add(entry); + } + + else if ("override".equals(componentType)) { + + getAbstractDrawer().add(entry); + } + + else if (componentType.startsWith("org.apache.shale")) { + getShaleDrawer().add(entry); + } + + else if (componentType.startsWith("javax.faces.HtmlInput") + || componentType.startsWith("javax.faces.HtmlSelect") + || componentType.equals("javax.faces.HtmlForm") + || componentType.equals("javax.faces.Parameter") + || componentType.startsWith("javax.faces.SelectItem")) { + getInputDrawer().add(entry); + + } + + else if (componentType.startsWith("javax.faces.HtmlOutput") + || componentType.startsWith("javax.faces.HtmlMessage")) { + getOutputDrawer().add(entry); + } + + else if (componentType.equals("javax.faces.HtmlDataTable") + || componentType.equals("javax.faces.Column")) { + getDataDrawer().add(entry); + } + + else if (componentType.startsWith("javax.faces.HtmlCommand")) { + getCommandDrawer().add(entry); + } + + else if (detectTomahawk(next)) { + getTomahawkDrawer().add(entry); + } + + else if (detectIBM(next)) { + getIbmDrawer().add(entry); + } + + else { + getOtherDrawer().add(entry); + } + + } + + Collections.sort(getDrawerList(), new Comparator() { + + public int compare(Object o1, Object o2) { + PaletteDrawer pd1 = (PaletteDrawer) o1; + PaletteDrawer pd2 = (PaletteDrawer) o2; + return pd1.getLabel().compareTo(pd2.getLabel()); + } + + }); + + return getDrawerList(); + } + + protected PaletteDrawer getAbstractDrawer() { + if (abstractDrawer == null) { + abstractDrawer = new PaletteDrawer("Abstract"); + abstractDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(abstractDrawer); + } + + return abstractDrawer; + } + + public PaletteDrawer getOtherDrawer() { + if (otherDrawer == null) { + otherDrawer = new PaletteDrawer("Other"); + otherDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(otherDrawer); + } + return otherDrawer; + } + + public PaletteDrawer getShaleDrawer() { + if (shaleDrawer == null) { + shaleDrawer = new PaletteDrawer("Shale"); + shaleDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(shaleDrawer); + } + return shaleDrawer; + } + + public PaletteDrawer getInputDrawer() { + if (inputDrawer == null) { + inputDrawer = new PaletteDrawer("Input"); + inputDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(inputDrawer); + } + return inputDrawer; + } + + public PaletteDrawer getOutputDrawer() { + if (outputDrawer == null) { + outputDrawer = new PaletteDrawer("Output"); + outputDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(outputDrawer); + } + return outputDrawer; + } + + public PaletteDrawer getDataDrawer() { + if (dataDrawer == null) { + dataDrawer = new PaletteDrawer("Data"); + dataDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(dataDrawer); + } + return dataDrawer; + } + + public PaletteDrawer getCommandDrawer() { + if (commandDrawer == null) { + commandDrawer = new PaletteDrawer("Command"); + commandDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(commandDrawer); + } + return commandDrawer; + } + + public PaletteDrawer getConverterDrawer() { + if (converterDrawer == null) { + converterDrawer = new PaletteDrawer("Converter"); + converterDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(converterDrawer); + } + return converterDrawer; + } + + public PaletteDrawer getValidatorDrawer() { + if (validatorDrawer == null) { + validatorDrawer = new PaletteDrawer("Validator"); + validatorDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(validatorDrawer); + } + return validatorDrawer; + } + + public PaletteDrawer getTomahawkDrawer() { + if (tomahawkDrawer == null) { + tomahawkDrawer = new PaletteDrawer("Tomahawk"); + tomahawkDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(tomahawkDrawer); + } + return tomahawkDrawer; + } + + public PaletteDrawer getIbmDrawer() { + if (ibmDrawer == null) { + ibmDrawer = new PaletteDrawer("IBM"); + ibmDrawer.setInitialState(PaletteDrawer.INITIAL_STATE_CLOSED); + getDrawerList().add(ibmDrawer); + } + return ibmDrawer; + } + + protected List getDrawerList() { + if (drawerList == null) { + drawerList = new ArrayList(); + } + return drawerList; + } + + protected String getComponentType(ComponentBean in) { + + if (in.getComponentType() != null) { + return in.getComponentType(); + } else { + if (in.getExtends() != null) { + ComponentBean parent = config.getElement(in.getExtends()); + if (parent != null) { + return getComponentType(parent); + } + } + } + + return null; + + } + + protected boolean detectValidator(ComponentBean in) { + String[] flags = new String[] { "validate", "Validate", "validator", + "Validator" }; + for (int i = 0; i < flags.length; ++i) { + if (in.getJsfid().indexOf(flags[i]) != -1) { + return true; + } + } + return false; + + } + + protected boolean detectConverter(ComponentBean in) { + String[] flags = new String[] { "convert", "Convert", "converter", + "Converter" }; + for (int i = 0; i < flags.length; ++i) { + if (in.getJsfid().indexOf(flags[i]) != -1) { + return true; + } + } + return false; + + } + + protected boolean detectTomahawk(ComponentBean in) { + return in.getJsfid().startsWith("t:"); + } + + protected boolean detectIBM(ComponentBean in) { + return (in.getComponentType() != null && in.getComponentType() + .startsWith("com.ibm.faces")); + } + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/PaletteDrawers.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/StringUtils.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/StringUtils.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/StringUtils.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/StringUtils.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.util; + +public class StringUtils { + + public static boolean empty(String in) { + return in == null || in.length() == 0; + } + +} Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/util/StringUtils.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizard.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizard.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizard.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizard.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,157 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.wizard; + +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.Wizard; +import org.eclipse.ui.INewWizard; +import org.eclipse.ui.IWorkbench; +import org.eclipse.core.runtime.*; +import org.eclipse.jface.operation.*; +import java.lang.reflect.InvocationTargetException; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.core.resources.*; +import org.eclipse.core.runtime.CoreException; +import java.io.*; +import org.eclipse.ui.*; +import org.eclipse.ui.ide.IDE; + + +public class ClayConfigNewWizard extends Wizard implements INewWizard { + private ClayConfigNewWizardPage page; + + private ISelection selection; + + /** + * Constructor + */ + public ClayConfigNewWizard() { + super(); + setNeedsProgressMonitor(true); + } + + /** + * Adding the page to the wizard. + */ + + public void addPages() { + page = new ClayConfigNewWizardPage(selection); + addPage(page); + } + + /** + * This method is called when 'Finish' button is pressed in the wizard. We + * will create an operation and run it using wizard as execution context. + */ + public boolean performFinish() { + final String containerName = page.getContainerName(); + final String fileName = page.getFileName(); + IRunnableWithProgress op = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) + throws InvocationTargetException { + try { + doFinish(containerName, fileName, monitor); + } catch (CoreException e) { + throw new InvocationTargetException(e); + } finally { + monitor.done(); + } + } + }; + try { + getContainer().run(true, false, op); + } catch (InterruptedException e) { + return false; + } catch (InvocationTargetException e) { + Throwable realException = e.getTargetException(); + MessageDialog.openError(getShell(), "Error", realException + .getMessage()); + return false; + } + return true; + } + + /** + * The worker method. It will find the container, create the file if missing + * or just replace its contents, and open the editor on the newly created + * file. + */ + + private void doFinish(String containerName, String fileName, + IProgressMonitor monitor) throws CoreException { + // create a sample file + monitor.beginTask("Creating " + fileName, 2); + IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); + IResource resource = root.findMember(new Path(containerName)); + if (!resource.exists() || !(resource instanceof IContainer)) { + throwCoreException("Container \"" + containerName + + "\" does not exist."); + } + IContainer container = (IContainer) resource; + final IFile file = container.getFile(new Path(fileName)); + try { + InputStream stream = openContentStream(); + if (file.exists()) { + file.setContents(stream, true, true, monitor); + } else { + file.create(stream, true, monitor); + } + stream.close(); + } catch (IOException e) { + } + monitor.worked(1); + monitor.setTaskName("Opening file for editing..."); + getShell().getDisplay().asyncExec(new Runnable() { + public void run() { + IWorkbenchPage page = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + try { + IDE.openEditor(page, file, "clay_plugin_3_2.editors.XMLEditor", true); + } catch (PartInitException e) { + } + } + }); + monitor.worked(1); + } + + /** + * We will initialize file contents with a sample text. + */ + + private InputStream openContentStream() { + String contents = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><view></view>"; + return new ByteArrayInputStream(contents.getBytes()); + } + + private void throwCoreException(String message) throws CoreException { + IStatus status = new Status(IStatus.ERROR, "NewClayConfigDialog", IStatus.OK, + message, null); + throw new CoreException(status); + } + + /** + * We will accept the selection in the workbench to see if we can initialize + * from it. + * + * @see IWorkbenchWizard#init(IWorkbench, IStructuredSelection) + */ + public void init(IWorkbench workbench, IStructuredSelection selection) { + this.selection = selection; + } +} \ No newline at end of file Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizard.java ------------------------------------------------------------------------------ svn:eol-style = native Added: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizardPage.java URL: http://svn.apache.org/viewvc/shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizardPage.java?view=auto&rev=558812 ============================================================================== --- shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizardPage.java (added) +++ shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizardPage.java Mon Jul 23 10:51:09 2007 @@ -0,0 +1,196 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to you 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 clay_plugin.wizard; + +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IResource; +import org.eclipse.core.resources.ResourcesPlugin; +import org.eclipse.core.runtime.Path; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.layout.GridLayout; +import org.eclipse.swt.widgets.Button; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.dialogs.ContainerSelectionDialog; + +public class ClayConfigNewWizardPage extends WizardPage { + private Text containerText; + + private Text fileText; + + private ISelection selection; + + /** + * Constructor + * + * @param pageName + */ + public ClayConfigNewWizardPage(ISelection selection) { + super("wizardPage"); + setTitle("Clay Config Editor File"); + setDescription("This wizard creates a new clay config file with *.xml extension."); + this.selection = selection; + } + + /** + * @see IDialogPage#createControl(Composite) + */ + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + GridLayout layout = new GridLayout(); + container.setLayout(layout); + layout.numColumns = 3; + layout.verticalSpacing = 9; + Label label = new Label(container, SWT.NULL); + label.setText("&Container:"); + + containerText = new Text(container, SWT.BORDER | SWT.SINGLE); + GridData gd = new GridData(GridData.FILL_HORIZONTAL); + containerText.setLayoutData(gd); + containerText.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + dialogChanged(); + } + }); + + Button button = new Button(container, SWT.PUSH); + button.setText("Browse..."); + button.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + handleBrowse(); + } + }); + label = new Label(container, SWT.NULL); + label.setText("&File name:"); + + fileText = new Text(container, SWT.BORDER | SWT.SINGLE); + gd = new GridData(GridData.FILL_HORIZONTAL); + fileText.setLayoutData(gd); + fileText.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + dialogChanged(); + } + }); + initialize(); + dialogChanged(); + setControl(container); + } + + /** + * Tests if the current workbench selection is a suitable container to use. + */ + + private void initialize() { + if (selection != null && selection.isEmpty() == false + && selection instanceof IStructuredSelection) { + IStructuredSelection ssel = (IStructuredSelection) selection; + if (ssel.size() > 1) + return; + Object obj = ssel.getFirstElement(); + if (obj instanceof IResource) { + IContainer container; + if (obj instanceof IContainer) + container = (IContainer) obj; + else + container = ((IResource) obj).getParent(); + containerText.setText(container.getFullPath().toString()); + } + } + fileText.setText("clay-config.xml"); + } + + /** + * Uses the standard container selection dialog to choose the new value for + * the container field. + */ + + private void handleBrowse() { + ContainerSelectionDialog dialog = new ContainerSelectionDialog( + getShell(), ResourcesPlugin.getWorkspace().getRoot(), false, + "Select new file container"); + if (dialog.open() == ContainerSelectionDialog.OK) { + Object[] result = dialog.getResult(); + if (result.length == 1) { + containerText.setText(((Path) result[0]).toString()); + } + } + } + + /** + * Ensures that both text fields are set. + */ + + private void dialogChanged() { + IResource container = ResourcesPlugin.getWorkspace().getRoot() + .findMember(new Path(getContainerName())); + String fileName = getFileName(); + + if (getContainerName().length() == 0) { + updateStatus("File container must be specified"); + return; + } + if (container == null + || (container.getType() & (IResource.PROJECT | IResource.FOLDER)) == 0) { + updateStatus("File container must exist"); + return; + } + if (!container.isAccessible()) { + updateStatus("Project must be writable"); + return; + } + if (fileName.length() == 0) { + updateStatus("File name must be specified"); + return; + } + if (fileName.replace('\\', '/').indexOf('/', 1) > 0) { + updateStatus("File name must be valid"); + return; + } + int dotLoc = fileName.lastIndexOf('.'); + if (dotLoc != -1) { + String ext = fileName.substring(dotLoc + 1); + if (ext.equalsIgnoreCase("xml") == false) { + updateStatus("File extension must be \"xml\""); + return; + } + } + updateStatus(null); + } + + private void updateStatus(String message) { + setErrorMessage(message); + setPageComplete(message == null); + } + + public String getContainerName() { + return containerText.getText(); + } + + public String getFileName() { + return fileText.getText(); + } +} \ No newline at end of file Propchange: shale/sandbox/shale-eclipse-plugins/plugins/shale_clay_plugin_for_eclipse/src/main/java/clay_plugin/wizard/ClayConfigNewWizardPage.java ------------------------------------------------------------------------------ svn:eol-style = native