/******************************************************************************* * Copyright (c) 2007 - 2012 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 * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.meta.ui.editor; import java.io.File; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Properties; import java.util.Set; import org.jboss.tools.common.meta.action.impl.AbstractHandler; import org.jboss.tools.common.meta.action.impl.handlers.DefaultCreateHandler; import org.jboss.tools.common.meta.action.impl.handlers.DefaultRemoveHandler; import org.jboss.tools.common.meta.key.WizardKeys; import org.jboss.tools.common.model.XModelException; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.filesystems.impl.FolderImpl; import org.jboss.tools.common.model.util.EclipseResourceUtil; public class GenerateKeysGloballyHandler extends AbstractHandler { //TODO ask in wizard String root = "C:/Documents and Settings/glory/RedHat-3.4"; //$NON-NLS-1$ public GenerateKeysGloballyHandler() {} public boolean isEnabled(XModelObject object) { return object != null; } public void executeHandler(XModelObject object, Properties p) throws XModelException { File productRoot = new File(root); File[] plugins = productRoot.listFiles(); List<PluginData> relevantPlugins = new ArrayList<PluginData>(); Set<String> allKeys = new HashSet<String>(); for (int i = 0; i < plugins.length; i++) { if(!plugins[i].isDirectory()) continue; File pxml = new File(plugins[i], "plugin.xml"); //$NON-NLS-1$ if(!pxml.isFile()) continue; File meta = new File(plugins[i], "resources/meta"); //$NON-NLS-1$ if(!meta.isDirectory()) continue; File helpFolder = new File(plugins[i], "resources/help"); //$NON-NLS-1$ if(!helpFolder.isDirectory()) { //TODO create folder } XModelObject o = EclipseResourceUtil.createObjectForLocation(pxml.getAbsolutePath()); if(o == null) { // System.out.println("Null for" + pxml); } else { XModelObject parent = o.getParent(); PluginData pluginData = new PluginData(); pluginData.rootFolder = plugins[i]; pluginData.rootObject = parent; pluginData.metaFolder = parent.getChildByPath("resources/meta"); //$NON-NLS-1$ relevantPlugins.add(pluginData); XModelObject[] cs = parent.getChildren(); if(!helpFolder.isDirectory()) { System.out.println("No help folder"); //$NON-NLS-1$ } XModelObject helpFolderObject = parent.getChildByPath("resources/help"); //$NON-NLS-1$ if(helpFolderObject != null) { XModelObject[] hf = helpFolderObject.getChildren("FilePROPERTIES"); //$NON-NLS-1$ for (int j = 0; j < hf.length; j++) { XModelObject[] ps = hf[j].getChildren(); for (int k = 0; k < ps.length; k++) allKeys.add(ps[k].getAttributeValue("name")); //$NON-NLS-1$ } } } } System.out.println("Total keys count = " + allKeys.size()); //$NON-NLS-1$ generateAttributeNameKeys(allKeys, relevantPlugins); generateMenuNameKeys(allKeys, relevantPlugins); } private void generateAttributeNameKeys(Set<String> allKeys, List<PluginData> relevantPlugins) throws XModelException { for (PluginData d: relevantPlugins) { XModelObject[] ms = d.metaFolder.getChildren("FileMETA"); //$NON-NLS-1$ for (int i = 0; i < ms.length; i++) { XModelObject version = ms[i].getChildByPath("Version"); //$NON-NLS-1$ String module = version.getAttributeValue("module"); //$NON-NLS-1$ String attrKeysFileName = "keys-" + module.toLowerCase() + "-attrs"; //$NON-NLS-1$ //$NON-NLS-2$ XModelObject attrKeys = findOrCreatePropertiesFile(d.rootObject, attrKeysFileName); if(attrKeys == null) { continue; } XModelObject[] es = ms[i].getChildren("MetaEntity"); //$NON-NLS-1$ for (int j = 0; j < es.length; j++) { XModelObject[] as = es[j].getChildByPath("Attributes").getChildren(); //$NON-NLS-1$ for (int k = 0; k < as.length; k++) { if(as[k].getModelEntity().getName().equals("MetaAttribute")) { //$NON-NLS-1$ addAttributeFieldDisplayName(attrKeys, module, allKeys, es[j], as[k]); } } } if(attrKeys.getChildren().length > 0) { System.out.println(attrKeysFileName + " " + attrKeys.getChildren().length); //$NON-NLS-1$ ((FolderImpl)attrKeys.getParent()).saveChild(attrKeys); } } } } private void addAttributeFieldDisplayName(XModelObject attrKeys, String module, Set<String> allKeys, XModelObject ent, XModelObject attr) throws XModelException { String name = attr.getAttributeValue("name"); //$NON-NLS-1$ String key_att_1 = ent.getAttributeValue("name") + "_" + name.replace(' ', '_'); //$NON-NLS-1$ //$NON-NLS-2$ if(allKeys.contains(key_att_1)) { // System.out.println("--->" + key_att_1); return; } key_att_1 = ent.getAttributeValue("name") + "." + name.replace(' ', '_'); //$NON-NLS-1$ //$NON-NLS-2$ if(allKeys.contains(key_att_1)) { // System.out.println("--->" + key_att_1); return; } String key_att_2 = module + "." + name.replace(' ', '_').replace(':', '_'); //$NON-NLS-1$ boolean invisible = "false".equals(attr.getAttributeValue("visibility")); //$NON-NLS-1$ //$NON-NLS-2$ if(attrKeys.getChildByPath(key_att_2) != null) { if(invisible) { // DefaultRemoveHandler.removeFromParent(attrKeys.getChildByPath(key_att_2)); } return; } if(invisible) return; XModelObject po = attrKeys.getModel().createModelObject("Property", new Properties()); //$NON-NLS-1$ po.setAttributeValue("name", key_att_2); //$NON-NLS-1$ po.setAttributeValue("value", WizardKeys.toDisplayName(name)); //$NON-NLS-1$ DefaultCreateHandler.addCreatedObject(attrKeys, po, 2); } private void generateMenuNameKeys(Set<String> allKeys, List<PluginData> relevantPlugins) throws XModelException { Set<String> mk = new HashSet<String>(); //Temp for (PluginData d: relevantPlugins) { XModelObject[] ms = d.metaFolder.getChildren("FileMETA"); //$NON-NLS-1$ for (int i = 0; i < ms.length; i++) { XModelObject version = ms[i].getChildByPath("Version"); //$NON-NLS-1$ String module = version.getAttributeValue("module"); //$NON-NLS-1$ String menuKeysFileName = "keys-" + module.toLowerCase() + "-menu"; //$NON-NLS-1$ //$NON-NLS-2$ XModelObject menuKeys = findOrCreatePropertiesFile(d.rootObject, menuKeysFileName); if(menuKeys == null) { continue; } XModelObject[] es = ms[i].getChildren("MetaEntity"); //$NON-NLS-1$ for (int j = 0; j < es.length; j++) { XModelObject list = es[j].getChildByPath("ActionList"); //$NON-NLS-1$ if(list != null) { generateMenuNameKeys(allKeys, menuKeys, list, mk); } } if(menuKeys.getChildren().length > 0) { System.out.println(menuKeysFileName + " " + menuKeys.getChildren().length); //$NON-NLS-1$ ((FolderImpl)menuKeys.getParent()).saveChild(menuKeys); } } } System.out.println("action menu names " + mk.size()); //$NON-NLS-1$ for (String s: mk) System.out.println(s); } private void generateMenuNameKeys(Set<String> allKeys, XModelObject menuKeys, XModelObject list, Set<String> mk) throws XModelException { String n = list.getAttributeValue("name"); //$NON-NLS-1$ String g = list.getAttributeValue("group"); //$NON-NLS-1$ if("1".equals(g)) { //$NON-NLS-1$ mk.add(n); } XModelObject[] cs = list.getChildren(); for (int i = 0; i < cs.length; i++) { String entity = cs[i].getModelEntity().getName(); if("MetaActionList".equals(entity)) { //$NON-NLS-1$ generateMenuNameKeys(allKeys, menuKeys, cs[i], mk); } else { String na = cs[i].getAttributeValue("name"); //$NON-NLS-1$ mk.add(na); } } } private XModelObject findOrCreatePropertiesFile(XModelObject root, String name) { XModelObject parent = root.getChildByPath("resources/help"); //$NON-NLS-1$ if(parent == null) return null; XModelObject o = parent.getChildByPath(name + ".properties"); //$NON-NLS-1$ if(o == null) { o = parent.getModel().createModelObject("FilePROPERTIES", new Properties()); //$NON-NLS-1$ o.setAttributeValue("name", name); //$NON-NLS-1$ parent.addChild(o); parent.setModified(true); } return o; } class PluginData { File rootFolder; XModelObject rootObject; XModelObject metaFolder; } }