Java tutorial
/******************************************************************************* * Copyright (c) 2000-present Liferay, Inc. All rights reserved. * * This library is free software; you can redistribute it and/or modify it under * the terms of the GNU Lesser General Public License as published by the Free * Software Foundation; either version 2.1 of the License, or (at your option) * any later version. * * This library is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more * details. * *******************************************************************************/ package com.liferay.ide.portlet.core; import com.liferay.ide.core.model.AbstractEditingModel; import com.liferay.ide.core.model.IModelChangedEvent; import com.liferay.ide.core.model.ModelChangedEvent; import com.liferay.ide.core.util.CoreUtil; import com.liferay.ide.core.util.StringPool; import java.io.InputStream; import java.io.StringWriter; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.apache.commons.configuration.ConfigurationException; import org.apache.commons.configuration.PropertiesConfiguration; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.IDocument; import org.eclipse.wst.sse.core.internal.provisional.INodeAdapter; /** * @author Greg Amerson */ @SuppressWarnings("restriction") public class PluginPackageModel extends AbstractEditingModel implements IPluginPackageModel { @SuppressWarnings("unused") private static final long serialVersionUID = 1L; PropertiesConfiguration pluginPackageProperties; public PluginPackageModel(IFile file, IDocument document, boolean isReconciling) { super(document, isReconciling); try { pluginPackageProperties = new PluginPropertiesConfiguration(); InputStream is = file.getContents(); pluginPackageProperties.load(is); is.close(); } catch (Exception e) { PortletCore.logError(e); } } public void addDependency(String propertyName, String value) { if (CoreUtil.isNullOrEmpty(value)) { return; } String existingDeps = pluginPackageProperties.getString(propertyName, StringPool.EMPTY); String[] existingValues = existingDeps.split(","); //$NON-NLS-1$ for (String existingValue : existingValues) { if (value.equals(existingValue)) { return; } } String newDeps = null; if (CoreUtil.isNullOrEmpty(existingDeps)) { newDeps = value; } else { newDeps = existingDeps + "," + value; //$NON-NLS-1$ } pluginPackageProperties.setProperty(propertyName, newDeps); flushProperties(); fireModelChanged(new ModelChangedEvent(this, IModelChangedEvent.INSERT, newDeps.split(","), propertyName)); //$NON-NLS-1$ } public void addPortalDependencyJar(String jar) { addDependency(PROPERTY_PORTAL_DEPENDENCY_JARS, jar); } public void addPortalDependencyTld(String tldFile) { addDependency(PROPERTY_PORTAL_DEPENDENCY_TLDS, tldFile); } public void addPortalDeployExcludeJar(String jar) { addDependency(PROPERTY_DEPLOY_EXCLUDE, jar); } public void addRequiredDeploymentContext(String context) { addDependency(PROPERTY_REQUIRED_DEPLOYMENT_CONTEXTS, context); } @Override public void adjustOffsets(IDocument document) throws CoreException { } public void dispose() { pluginPackageProperties = null; } public String getAuthor() { return getStringProperty(PROPERTY_AUTHOR); } public Boolean getBooleanProperty(String propertyName, boolean defaultVal) { if (pluginPackageProperties != null) { return pluginPackageProperties.getBoolean(propertyName, defaultVal); } return null; } public String getChangeLog() { return getStringProperty(PROPERTY_CHANGE_LOG); } public String getLicenses() { return getStringProperty(PROPERTY_LICENSES); } public String getLiferayVersions() { return getStringProperty(PROPERTY_LIFERAY_VERSIONS); } public String getLongDescription() { return getStringProperty(PROPERTY_LONG_DESCRIPTION); } public String getModuleGroupId() { return getStringProperty(PROPERTY_MODULE_GROUP_ID); } public String getModuleIncrementalVersion() { return getStringProperty(PROPERTY_MODULE_INCREMENTAL_VERSION); } public String getName() { return getStringProperty(PROPERTY_NAME); } public String getPageUrl() { return getStringProperty(PROPERTY_PAGE_URL); } public String[] getPortalDependencyJars() { String portalJars = pluginPackageProperties.getString(PROPERTY_PORTAL_DEPENDENCY_JARS, null); if (portalJars != null) { return portalJars.split(","); //$NON-NLS-1$ } else { return new String[0]; } } public String[] getPortalDependencyTlds() { String portalTlds = pluginPackageProperties.getString(PROPERTY_PORTAL_DEPENDENCY_TLDS, null); if (portalTlds != null) { return portalTlds.split(","); //$NON-NLS-1$ } else { return new String[0]; } } public String[] getPortalDeloyExcludesJars() { String exludeJars = pluginPackageProperties.getString(PROPERTY_DEPLOY_EXCLUDE, null); if (exludeJars != null) { return exludeJars.split(","); //$NON-NLS-1$ } else { return new String[0]; } } public String[] getRequiredDeploymentContexts() { String contexts = pluginPackageProperties.getString(PROPERTY_REQUIRED_DEPLOYMENT_CONTEXTS, null); if (contexts != null) { return contexts.split(","); //$NON-NLS-1$ } else { return new String[0]; } } public String getShortDescription() { return getStringProperty(PROPERTY_SHORT_DESCRIPTION); } public String getStringProperty(String propertyName) { if (pluginPackageProperties != null) { if (pluginPackageProperties.getProperty(propertyName) != null) { return pluginPackageProperties.getString(propertyName); } } return null; } public String getTags() { return getStringProperty(PROPERTY_TAGS); } public boolean isAdapterForType(Object type) { return type != null && INodeAdapter.class == type; } public Boolean isSpeedFiltersEnabled() { return getBooleanProperty(PROPERTY_SPEED_FILTERS_ENABLED, true); } public void load(InputStream source, boolean outOfSync) throws CoreException { pluginPackageProperties.clear(); try { pluginPackageProperties.load(source); flushProperties(); fireModelChanged(new ModelChangedEvent(this, IModelChangedEvent.WORLD_CHANGED, null, null)); } catch (ConfigurationException e) { throw new CoreException(PortletCore.createErrorStatus(e)); } } public void removeDependency(String propertyName, String[] removedValues) { String portalDependencies = pluginPackageProperties.getString(propertyName, null); List<String> updatedValues = new ArrayList<String>(); String[] deps = portalDependencies.split(","); //$NON-NLS-1$ for (String dep : deps) { if (dep.startsWith("**/WEB-INF/lib/")) { dep = dep.substring(dep.lastIndexOf("/") + 1); } boolean shouldKeep = true; for (String removedValue : removedValues) { if (dep.trim().equals(removedValue.trim())) { shouldKeep = false; break; } } if (shouldKeep) { updatedValues.add(dep); } } if (updatedValues.size() > 0) { pluginPackageProperties.setProperty(propertyName, StringPool.EMPTY); for (String updatedValue : updatedValues) { addDependency(propertyName, updatedValue); } } else { pluginPackageProperties.clearProperty(propertyName); } flushProperties(); fireModelChanged( new ModelChangedEvent(this, IModelChangedEvent.REMOVE, updatedValues.toArray(), propertyName)); } public void removePortalDependencyJars(String[] removedJars) { removeDependency(PROPERTY_PORTAL_DEPENDENCY_JARS, removedJars); } public void removePortalDependencyTlds(String[] removedTlds) { removeDependency(PROPERTY_PORTAL_DEPENDENCY_TLDS, removedTlds); } public void removePortalDeployExcludeJar(String[] removedJars) { removeDependency(PROPERTY_DEPLOY_EXCLUDE, removedJars); } public void removeRequiredDeploymentContexts(String[] contexts) { removeDependency(PROPERTY_REQUIRED_DEPLOYMENT_CONTEXTS, contexts); } public void setAuthor(String author) { setProperty(PROPERTY_AUTHOR, author); } public void setChangeLog(String changeLog) { setProperty(PROPERTY_CHANGE_LOG, changeLog); } public void setLicenses(String licenses) { setProperty(PROPERTY_LICENSES, licenses); } public void setLiferayVersions(String liferayVersions) { setProperty(PROPERTY_LIFERAY_VERSIONS, liferayVersions); } public void setLongDescription(String desc) { setProperty(PROPERTY_LONG_DESCRIPTION, desc); } public void setModuleGroupId(String moduleGroupId) { setProperty(PROPERTY_MODULE_GROUP_ID, moduleGroupId); } public void setModuleIncrementalVersion(String moduleIncrementalVersion) { setProperty(PROPERTY_MODULE_INCREMENTAL_VERSION, moduleIncrementalVersion); } public void setName(String name) { setProperty(PROPERTY_NAME, name); } public void setPageUrl(String pageUrl) { setProperty(PROPERTY_PAGE_URL, pageUrl); } public void setProperty(String propertyName, Object propertyValue) { Object oldValue = pluginPackageProperties.getProperty(propertyName); pluginPackageProperties.setProperty(propertyName, propertyValue); flushProperties(); fireModelChanged(new ModelChangedEvent(this, null, propertyName, oldValue, propertyValue)); } public void setShortDescription(String desc) { setProperty(PROPERTY_SHORT_DESCRIPTION, desc); } public void setSpeedFiltersEnabled(boolean enabled) { Boolean oldValue = isSpeedFiltersEnabled(); pluginPackageProperties.setProperty(PROPERTY_SPEED_FILTERS_ENABLED, enabled); flushProperties(); fireModelChanged(new ModelChangedEvent(this, null, PROPERTY_SPEED_FILTERS_ENABLED, oldValue, enabled)); } public void setTags(String tags) { setProperty(PROPERTY_TAGS, tags); } public void swapDependencies(String property, String dep1, String dep2) { String[] deps = null; String depsValue = pluginPackageProperties.getString(property, null); if (depsValue != null) { deps = depsValue.split(","); //$NON-NLS-1$ } else { deps = new String[0]; } ArrayList<String> list = new ArrayList<String>(); Collections.addAll(list, deps); int index1 = list.indexOf(dep1); int index2 = list.indexOf(dep2); list.set(index2, dep1); list.set(index1, dep2); String[] newValues = list.toArray(new String[0]); StringBuffer buffer = new StringBuffer(); for (String val : newValues) { buffer.append(val + ","); //$NON-NLS-1$ } String newValue = buffer.toString().substring(0, buffer.length() - 1); pluginPackageProperties.setProperty(property, newValue); flushProperties(); fireModelChanged(new ModelChangedEvent(this, null, property, depsValue, newValue)); } protected void flushProperties() { StringWriter output = new StringWriter(); try { pluginPackageProperties.save(output); this.getDocument().set(output.toString()); } catch (ConfigurationException e) { } } }