/******************************************************************************* * 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.jsf.model.handlers; import java.util.*; import org.jboss.tools.common.meta.action.impl.AbstractHandler; import org.jboss.tools.common.meta.action.impl.handlers.DefaultCreateHandler; import org.jboss.tools.common.model.*; import org.jboss.tools.jsf.model.*; import org.jboss.tools.jsf.model.helpers.JSFProcessHelper; import org.jboss.tools.jsf.messages.JSFUIMessages; public class AddCaseToGroupHandler extends AbstractHandler implements JSFConstants { public boolean isEnabled(XModelObject object) { return object != null && object.isObjectEditable(); } public void executeHandler(XModelObject object, Properties p) throws XModelException { p = DefaultCreateHandler.extractProperties(data[0]); String fv = p.getProperty(ATT_TO_VIEW_ID); if(fv.indexOf("*") >= 0 || fv.length() == 0) { //$NON-NLS-1$ ServiceDialog d = object.getModel().getService(); int q = d.showDialog(JSFUIMessages.WARNING, JSFUIMessages.IT_ISNT_CORRECT_TO_MAKE_LINK_TO_A_PATTERN, new String[]{JSFUIMessages.YES, JSFUIMessages.NO}, null, ServiceDialog.WARNING); if(q != 0) return; } fv = AddViewSupport.revalidatePath(fv); p.setProperty(ATT_TO_VIEW_ID, fv); String caseEntity = ENT_NAVIGATION_CASE; if(object.getParent().getParent().getModelEntity().getName().endsWith(SUFF_20)) { caseEntity = ENT_NAVIGATION_CASE_20; } XModelObject ncase = object.getModel().createModelObject(caseEntity, p); ReferenceGroupImpl g = (ReferenceGroupImpl)object; XModelObject[] rs = g.getReferences(); if(rs.length > 0) { DefaultCreateHandler.addCreatedObject(rs[rs.length - 1], ncase, p); } else { FacesProcessImpl process = (FacesProcessImpl)g.getParent(); JSFNavigationModel n = (JSFNavigationModel)process.getReference(); String path = g.getAttributeValue(ATT_PATH); String pp = g.getPathPart(); int count = n.getRuleCount(path); String ppi = revalidateGroupPath(path, pp, count); if(!ppi.equals(pp)) { g.setAttributeValue(ATT_NAME, ppi); } XModelObject rule = n.addRule(path); DefaultCreateHandler.addCreatedObject(rule, ncase, p); g.setAttributeValue("persistent", "false"); //$NON-NLS-1$ //$NON-NLS-2$ } } public static String revalidateGroupPath(String path, String pathpart, int index) { if(!JSFProcessHelper.isPattern(path)) return pathpart; int s = pathpart.lastIndexOf(":"); //$NON-NLS-1$ if(s < 6 && index == 0) return pathpart; if(index == 0) return pathpart.substring(0, s); if(s < 0) return pathpart + ":" + index; //$NON-NLS-1$ return pathpart.substring(0, s) + ":" + index; //$NON-NLS-1$ } /*TRIAL_JSF_CLASS*/ }