/******************************************************************************* * 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.tile; import java.util.Properties; import org.jboss.tools.common.meta.action.SpecialWizard; import org.jboss.tools.common.meta.action.XActionInvoker; import org.jboss.tools.common.model.XModel; import org.jboss.tools.common.model.XModelException; import org.jboss.tools.common.model.XModelObject; import org.jboss.tools.common.model.plugin.ModelPlugin; import org.jboss.tools.jsf.model.pv.JSFProjectTiles; import org.jboss.tools.jst.web.model.helpers.WebAppHelper; public class TilesFileRegistration implements SpecialWizard { Properties p; XModel model; XModelObject webxml; String oldPath; String path; boolean test; public void setObject(Object object) { p = (Properties)object; model = (XModel)p.get("model"); //$NON-NLS-1$ webxml = WebAppHelper.getWebApp(model); path = p.getProperty("path"); //$NON-NLS-1$ oldPath = p.getProperty("oldPath"); //$NON-NLS-1$ test = "true".equals(p.getProperty("test")); //$NON-NLS-1$ //$NON-NLS-2$ } public int execute() { if(webxml == null) return 1; try { return doExecute(); } catch (XModelException e) { ModelPlugin.getPluginLog().logError(e); if(p != null) p.put("exception", e); //$NON-NLS-1$ return 1; } } private int doExecute() throws XModelException { if(test) { return test(); } else if(path == null && oldPath != null) { remove(); } else if(path == null) { return 1; } else if(oldPath != null) { replace(); } else { append(); } XActionInvoker.invoke("SaveActions.Save", webxml, null); //$NON-NLS-1$ return 0; } void append() throws XModelException { XModelObject context = WebAppHelper.findWebAppContextParam(webxml, JSFProjectTiles.TILES_DEFINITIONS_2); if(context != null) { WebAppHelper.appendToWebAppContextParam(webxml, JSFProjectTiles.TILES_DEFINITIONS_2, path); } else { XModelObject servlet = WebAppHelper.findOrCreateServlet(webxml, JSFProjectTiles.TILES_SERVLET_CLASS, JSFProjectTiles.TILES_SERVLET_DEFAULT_NAME, 2); WebAppHelper.appendToWebAppInitParam(servlet, JSFProjectTiles.TILES_DEFINITIONS, path); } } void replace() throws XModelException { XModelObject context = WebAppHelper.findWebAppContextParam(webxml, JSFProjectTiles.TILES_DEFINITIONS_2); String[] s = null; XModelObject servlet = null; if(context != null) { s = WebAppHelper.getWebAppContextParamValueList(webxml, JSFProjectTiles.TILES_DEFINITIONS_2); } else { servlet = WebAppHelper.findOrCreateServlet(webxml, JSFProjectTiles.TILES_SERVLET_CLASS, JSFProjectTiles.TILES_SERVLET_DEFAULT_NAME, 2); s = WebAppHelper.getWebAppInitParamValueList(servlet, JSFProjectTiles.TILES_DEFINITIONS); } StringBuilder sb = new StringBuilder(); boolean replaced = false; for (int i = 0; i < s.length; i++) { String add = null; if(s[i].equals(oldPath)) { add = path; replaced = true; } else { add = s[i]; } if(add != null) { if(sb.length() > 0) sb.append(","); //$NON-NLS-1$ sb.append(add); } } if(!replaced && path != null) { if(sb.length() > 0) sb.append(","); //$NON-NLS-1$ sb.append(path); } if(context != null) { WebAppHelper.setWebAppContextParam(webxml, JSFProjectTiles.TILES_DEFINITIONS_2, sb.toString()); } else { WebAppHelper.setWebAppInitParam(servlet, JSFProjectTiles.TILES_DEFINITIONS, sb.toString()); } p.setProperty("success", "true"); //$NON-NLS-1$ //$NON-NLS-2$ } int test() throws XModelException { if(path == null) return 1; XModelObject context = WebAppHelper.findWebAppContextParam(webxml, JSFProjectTiles.TILES_DEFINITIONS_2); String[] s = null; XModelObject servlet = null; if(context != null) { s = WebAppHelper.getWebAppContextParamValueList(webxml, JSFProjectTiles.TILES_DEFINITIONS_2); } else { servlet = WebAppHelper.findOrCreateServlet(webxml, JSFProjectTiles.TILES_SERVLET_CLASS, JSFProjectTiles.TILES_SERVLET_DEFAULT_NAME, 2); s = WebAppHelper.getWebAppInitParamValueList(servlet, JSFProjectTiles.TILES_DEFINITIONS); } for (int i = 0; i < s.length; i++) { if(s[i].equals(path)) { return 0; } } return 1; } void remove() throws XModelException { replace(); } }