/******************************************************************************* * Copyright (c) 2007 Exadel, Inc. and 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: * Exadel, Inc. and Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.model.search.impl; import java.text.MessageFormat; import java.util.*; import org.jboss.tools.common.model.*; import org.jboss.tools.common.model.plugin.ModelMessages; import org.jboss.tools.common.model.util.*; import org.jboss.tools.common.meta.action.*; import org.jboss.tools.common.meta.action.impl.*; import org.jboss.tools.common.meta.action.impl.handlers.*; //TODO check if this class is still needed public class SearchDefaultHandler extends AbstractHandler { static String CONSTRAINT_ENTITY = "SearchValue"; //$NON-NLS-1$ static SpecialWizard wizard = null; static SpecialWizard wizard() { return wizard; } public SearchDefaultHandler() {} public boolean isEnabled(XModelObject object) { return (wizard() != null && object != null || object.getPath() != null); } public void executeHandler(XModelObject object, Properties p) throws XModelException { executeHandler(object, new XModelObject[]{object}, p); } public void executeHandler(XModelObject object, XModelObject[] objects, Properties p) throws XModelException { if(!isEnabled(object) || objects == null || objects.length == 0) return; XModelObject sc = getModifiedSearch(object, objects); if(sc == null) return; wizard.setObject(new Object[]{sc}); wizard.execute(); } private XModelObject getModifiedSearch(XModelObject object, XModelObject[] objects) throws XModelException { XModel model = object.getModel(); XModelObject sc = findOrCreateDefaultSearch(object, objects); ServiceDialog d = model.getService(); XEntityData ed = getSearchEntityData(sc); int i = d.showDialog("Search", getDialogTitle(objects), new String[]{ModelMessages.OK, ModelMessages.Cancel}, ed, ServiceDialog.QUESTION); if(i != 0) return null; Properties p = DefaultCreateHandler.extractProperties(ed); Enumeration en = p.keys(); XModelObject vc = sc.getChildByPath("Match/value constraint"); //$NON-NLS-1$ while(en.hasMoreElements()) { String n = (String)en.nextElement(); String v = p.getProperty(n); model.changeObjectAttribute(vc, n, v); } model.saveOptions(); return sc; } private XModelObject findOrCreateDefaultSearch(XModelObject object, XModelObject[] objects) throws XModelException { XModel model = object.getModel(); XModelObject sr = model.getByPath("XStudio/Search"); //$NON-NLS-1$ XModelObject ds = sr.getChildByPath("Default"); //$NON-NLS-1$ Properties p = new Properties(); StringBuffer sb = new StringBuffer(); for (int i = 0; i < objects.length; i++) { if(i > 0) sb.append(";"); //$NON-NLS-1$ sb.append(objects[i].getPath()); } if(ds == null) { p.setProperty(XModelObjectConstants.ATTR_NAME, "Default"); //$NON-NLS-1$ p.setProperty("root", sb.toString()); //$NON-NLS-1$ ds = XModelObjectLoaderUtil.createValidObject(model, "SearchCommand", p); //$NON-NLS-1$ sr.addChild(ds); sr.setModified(true); } else { model.changeObjectAttribute(ds, "root", sb.toString()); //$NON-NLS-1$ } XModelObject match = ds.getChildByPath("Match"); //$NON-NLS-1$ XModelObject v = null; if(match.getChildren(CONSTRAINT_ENTITY).length > 0) { v = match.getChildren(CONSTRAINT_ENTITY)[0]; } else { p.clear(); p.setProperty(XModelObjectConstants.ATTR_NAME, "value constraint"); //$NON-NLS-1$ v = XModelObjectLoaderUtil.createValidObject(model, CONSTRAINT_ENTITY, p); match.addChild(v); match.setModified(true); } return ds; } private String getDialogTitle(XModelObject[] os) { if(os.length == 1) return MessageFormat.format("Find in path {0}", os[0].getPath()); StringBuffer sb = new StringBuffer("Find in paths:"); for (int i = 0; i < os.length; i++) sb.append("\n").append(os[i].getPath()); //$NON-NLS-1$ return sb.toString(); } private XEntityData getSearchEntityData(XModelObject sc) { XModelObject c = sc.getChildByPath("Match/value constraint"); //$NON-NLS-1$ String[][] ds = new String[][]{{"SearchValue", XModelObjectConstants.YES}, //$NON-NLS-1$ {"text to find", XModelObjectConstants.YES}, //$NON-NLS-1$ {"property name", XModelObjectConstants.NO}, //$NON-NLS-1$ {"ignore case", XModelObjectConstants.NO}}; //$NON-NLS-1$ XEntityData d = XEntityDataImpl.create(ds); XAttributeData[] as = d.getAttributeData(); for (int i = 0; i < as.length; i++) { String n = as[i].getAttribute().getName(); String v = c.getAttributeValue(n); if(v != null) as[i].setValue(v); } return d; } }