/* * � Copyright IBM Corp. 2011 * * Licensed 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 com.ibm.xsp.extlib.designer.xspprops.xsplibs; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.ICheckStateListener; import com.ibm.commons.iloader.node.DataNode; import com.ibm.commons.iloader.node.IAttribute; import com.ibm.commons.iloader.node.ILoader; import com.ibm.commons.iloader.node.IMember; import com.ibm.commons.iloader.node.NodeException; import com.ibm.commons.util.StringUtil; import com.ibm.designer.domino.constants.log.DesignerLoggerAdapter; import com.ibm.designer.domino.ide.resources.dbproperties.XspPropertiesDesignTimeAttrs; import com.ibm.xsp.extlib.designer.xspprops.XSPAllProperties; import com.ibm.xsp.library.LibraryWrapper; /** * @author doconnor * */ public class XPageLibraryCheckStateListener implements ICheckStateListener, XspPropertiesDesignTimeAttrs { private DataNode parentDataNode; private XSPAllProperties xspProperties; /** * */ public XPageLibraryCheckStateListener(DataNode dn, XSPAllProperties xspProps) { this.parentDataNode = dn; this.xspProperties = xspProps; } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.ICheckStateListener#checkStateChanged(org.eclipse.jface.viewers.CheckStateChangedEvent) */ public void checkStateChanged(CheckStateChangedEvent event) { parentDataNode.setModelModified(true); if(event != null){ Object element = event.getElement(); DataNode root = parentDataNode.getRootNode(); IMember member = root.getMember(ATTR_XSP_PROPS_BEAN); // $NON-NLS-1$ IMember dep = null; if(member != null && member.getTypeDef() != null){ dep = member.getTypeDef().getMember(ATTR_XSP_DEPENDENCIES); // $NON-NLS-1$ } ILoader loader = root.getLoader(); if(event.getChecked()){ //add library if(element instanceof LibraryWrapper){ LibraryWrapper library = (LibraryWrapper)element; xspProperties.appendDependencies(library.getLibraryId()); if(loader != null && dep instanceof IAttribute){ try { loader.setValue(xspProperties, (IAttribute)dep, xspProperties.getDependencies(), null); } catch (NodeException e) { if(DesignerLoggerAdapter.DB_PROPS_LOG.isWarnEnabled()){ DesignerLoggerAdapter.DB_PROPS_LOG.warnp(this, "checkStateChanged", e, "Failed to add to dependencies in xsp.properties. Failed to add: {0}", library.getLibraryId()); // $NON-NLS-1$ $NLI-XPageLibraryCheckStateListener.Failedtoaddtodependenciesinxsppro-2$ } } } } } else{ //remove library if(element instanceof LibraryWrapper){ LibraryWrapper library = (LibraryWrapper)element; String ids = StringUtil.getNonNullString(xspProperties.getDependencies()); String id = library.getLibraryId(); List<String> list = new ArrayList<String>(Arrays.asList(ids.split(","))); if(list.contains(id)){ list.remove(id); xspProperties.setDependencies(null); boolean first = true; for(String newId : list){ if(first){ xspProperties.appendDependencies(newId); }else{ xspProperties.appendDependencies("," + newId); } } if(loader != null && dep instanceof IAttribute){ try { loader.setValue(xspProperties, (IAttribute)dep, xspProperties.getDependencies(), null); } catch (NodeException e) { if(DesignerLoggerAdapter.DB_PROPS_LOG.isWarnEnabled()){ DesignerLoggerAdapter.DB_PROPS_LOG.warnp(this, "checkStateChanged", e, "Failed to remove library dependency ({0}) from xsp.properties", id); // $NON-NLS-1$ $NLI-XPageLibraryCheckStateListener.Failedtoremovelibrarydependency0f-2$ } } } } } } } } }