Java tutorial
/* * Created on Mar 23, 2007 Copyright (C) 2001-5, Anthony Harrison anh23@pitt.edu * (jactr.org) 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. You should have * received a copy of the GNU Lesser General Public License along with this * library; if not, write to the Free Software Foundation, Inc., 59 Temple * Place, Suite 330, Boston, MA 02111-1307 USA */ package org.jactr.eclipse.ui.wizards.templates; import java.util.Arrays; import java.util.Collections; import java.util.SortedMap; import java.util.TreeMap; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.pde.core.IEditableModel; import org.eclipse.pde.core.build.IBuildModel; import org.eclipse.pde.internal.core.ibundle.IBundle; import org.eclipse.pde.internal.core.ibundle.IBundlePluginModelBase; import org.eclipse.pde.internal.core.ibundle.IManifestHeader; import org.eclipse.pde.internal.core.text.bundle.BundleSymbolicNameHeader; import org.eclipse.pde.ui.templates.TemplateOption; import org.osgi.framework.Constants; /** * basic template that contributes a jACT-R Module */ public class DefaultACTRContributorTemplateSection extends BaseACTRContributorTemplateSection { /** * Logger definition */ static private final transient Log LOGGER = LogFactory.getLog(DefaultACTRContributorTemplateSection.class); public DefaultACTRContributorTemplateSection() { } @Override protected void updateModel(IProgressMonitor monitor) throws CoreException { addProjectNature(); addEclipseBuddies(Arrays.asList("org.jactr", "org.jactr.io", "org.jactr.support", "org.jactr.tools", "org.commonreality.core", "org.apache.log4j", "org.apache.commons.logging")); /* * add the classpaths for models/, configurations/ */ addSourceFolders(Arrays.asList("models/", "configuration/")); /* * this is just cosmetic.. */ sortEntries(); IBuildModel bModel = model.getBuildModel(); if (bModel == null) LOGGER.warn("null build model"); else LOGGER.warn("Non null build model"); if (bModel instanceof IEditableModel) ((IEditableModel) bModel).save(); /* * one last tidbit.. to ensure that we are a singleton, regardless of the * presence of extensions.. copied from * org.eclipse.pde.internal.core.bundle.BundlePluginBase */ if (model instanceof IBundlePluginModelBase) { if (LOGGER.isDebugEnabled()) LOGGER.debug("we have access to the bundle information, attempting to update"); IBundle bundle = ((IBundlePluginModelBase) model).getBundleModel().getBundle(); IManifestHeader header = bundle.getManifestHeader(Constants.BUNDLE_SYMBOLICNAME); if (header instanceof BundleSymbolicNameHeader) ((BundleSymbolicNameHeader) header).setSingleton(true); else { String version = bundle.getHeader(Constants.BUNDLE_MANIFESTVERSION); if (version == null) version = "1"; //$NON-NLS-1$ String value = header.getValue(); String singletonValue = null; if (version != null && Integer.parseInt(version) >= 2) singletonValue = Constants.SINGLETON_DIRECTIVE + ":=true"; //$NON-NLS-1$ else singletonValue = Constants.SINGLETON_DIRECTIVE + "=true"; //$NON-NLS-1$ if (value.indexOf(singletonValue) == -1) bundle.setHeader(Constants.BUNDLE_SYMBOLICNAME, value + "; " + singletonValue); //$NON-NLS-1$ } } } /** * stupid cosmetic bit to reorder the classpath entries so that models/, * java/, conf/ appear first * * @throws CoreException */ private void sortEntries() throws CoreException { IJavaProject javaProject = JavaCore.create(project); IClasspathEntry[] oldEntries = javaProject.getRawClasspath(); SortedMap<String, IClasspathEntry> sortedMap = new TreeMap<String, IClasspathEntry>( Collections.reverseOrder()); for (IClasspathEntry entry : oldEntries) { String name = entry.getPath().lastSegment(); if (entry.getEntryKind() != IClasspathEntry.CPE_SOURCE && entry.getEntryKind() != IClasspathEntry.CPE_LIBRARY) name = "a" + name; sortedMap.put(name, entry); } oldEntries = sortedMap.values().toArray(oldEntries); javaProject.setRawClasspath(oldEntries, null); } @Override public String getSectionId() { return "default"; } @Override public String getLabel() { return "Contributes basic jACT-R Content"; } @Override public String[] getNewFiles() { return new String[] { "jactr-log.xml", "libs/", "configuration/", "plugin.xml", "models/" }; } public String getUsedExtensionPoint() { return null; } @Override public void validateOptions(TemplateOption changed) { } }