/* * ==================================================================== * * The ObjectStyle Group Software License, Version 1.0 * * Copyright (c) 2005 The ObjectStyle Group and individual authors of the * software. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * 3. The end-user documentation included with the redistribution, if any, must * include the following acknowlegement: "This product includes software * developed by the ObjectStyle Group (http://objectstyle.org/)." Alternately, * this acknowlegement may appear in the software itself, if and wherever such * third-party acknowlegements normally appear. * * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse or * promote products derived from this software without prior written permission. * For written permission, please contact andrus@objectstyle.org. * * 5. Products derived from this software may not be called "ObjectStyle" nor * may "ObjectStyle" appear in their names without prior written permission of * the ObjectStyle Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * OBJECTSTYLE GROUP OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many individuals on * behalf of the ObjectStyle Group. For more information on the ObjectStyle * Group, please see <http://objectstyle.org/>. * */ package org.objectstyle.wolips.core.resources.internal.build; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.objectstyle.wolips.core.resources.internal.pattern.PatternList; import org.objectstyle.wolips.core.resources.internal.types.project.ProjectPatternsets; import org.objectstyle.wolips.core.resources.types.folder.IBuildAdapter; import org.objectstyle.wolips.core.resources.types.folder.IDotApplicationAdapter; import org.objectstyle.wolips.core.resources.types.folder.IDotFrameworkAdapter; /** * @author ulrich/mike */ public class AbstractBuildVisitor { public static int WO_RESOURCE_TYPE_IGNORE = 0; public static int WO_RESOURCE_TYPE_RESOURCE = 1; public static int WO_RESOURCE_TYPE_WEB_SERVER_RESOURCE = 2; public static int WO_RESOURCE_TYPE_CLASS = 3; public static int WO_RESOURCE_TYPE_CLASSPATH = 4; public static int WO_RESOURCE_TYPE_OTHER = 5; public static int WO_RESOURCE_TYPE_SOURCE = 6; private IProgressMonitor myProgressMonitor; private BuilderWrapper[] myBuilderWrappers; private ProjectPatternsets projectPatternsets; private Map myBuildCache; private final static PatternList DEFAULT_EXCLUDE_MATCHER = new PatternList(new String[] { "**/.svn", "**/.svn/**", "**/CVS", "**.*~/**", "**/CVS/**", "**/build/**", "**/dist/**" }); public AbstractBuildVisitor(BuilderWrapper[] _builderWrappers, IProgressMonitor _progressMonitor, Map _buildCache) { myBuilderWrappers = _builderWrappers; myProgressMonitor = _progressMonitor; myBuildCache = _buildCache; } public Map getBuildCache() { return myBuildCache; } public IProgressMonitor getProgressMonitor() { return myProgressMonitor; } public boolean isCanceled() { return myProgressMonitor != null && myProgressMonitor.isCanceled(); } public BuilderWrapper[] getBuilderWrappers() { return myBuilderWrappers; } public void buildStarted(IProject project) { projectPatternsets = new ProjectPatternsets(project); } public void visitingDone() { projectPatternsets = null; } public int getWoResourceType(IResource _resource) { int woResourceType; if (_resource == null || _resource.isDerived()) { return AbstractBuildVisitor.WO_RESOURCE_TYPE_IGNORE; } if (_resource.getType() == IResource.FOLDER) { if (IBuildAdapter.FILE_NAME_DIST.equals(_resource.getName())) { return AbstractBuildVisitor.WO_RESOURCE_TYPE_IGNORE; } IDotFrameworkAdapter dotFrameworkAdapter = (IDotFrameworkAdapter) _resource.getAdapter(IDotFrameworkAdapter.class); if (dotFrameworkAdapter != null) { return AbstractBuildVisitor.WO_RESOURCE_TYPE_IGNORE; } IDotApplicationAdapter dotApplicationAdapter = (IDotApplicationAdapter) _resource.getAdapter(IDotApplicationAdapter.class); if (dotApplicationAdapter != null) { return AbstractBuildVisitor.WO_RESOURCE_TYPE_IGNORE; } } String[] strings = toProjectRelativePaths(_resource); if (DEFAULT_EXCLUDE_MATCHER.matches(strings)) { woResourceType = AbstractBuildVisitor.WO_RESOURCE_TYPE_IGNORE; } else if (!projectPatternsets.getClassesExcludeMatcher().match(strings) && projectPatternsets.getClassesIncludeMatcher().match(strings)) { woResourceType = AbstractBuildVisitor.WO_RESOURCE_TYPE_CLASS; } else if (!projectPatternsets.getResourcesExcludeMatcher().match(strings) && projectPatternsets.getResourcesIncludeMatcher().match(strings)) { woResourceType = AbstractBuildVisitor.WO_RESOURCE_TYPE_RESOURCE; } else if (!projectPatternsets.getWoappResourcesExcludeMatcher().match(strings) && projectPatternsets.getWoappResourcesIncludeMatcher().match(strings)) { woResourceType = AbstractBuildVisitor.WO_RESOURCE_TYPE_WEB_SERVER_RESOURCE; } else if (_resource.getType() == IResource.FILE && _resource.getName().endsWith(".java")) { woResourceType = AbstractBuildVisitor.WO_RESOURCE_TYPE_SOURCE; } else { woResourceType = AbstractBuildVisitor.WO_RESOURCE_TYPE_OTHER; } if (_resource.getType() == IResource.FILE && _resource.getName().equals(".classpath")) { woResourceType = AbstractBuildVisitor.WO_RESOURCE_TYPE_CLASSPATH; } return woResourceType; } private String[] toProjectRelativePaths(IResource resource) { String[] returnValue = null; if (resource.getParent().getType() != IResource.ROOT) { String string = null; if (resource.getType() != IResource.FOLDER) { returnValue = new String[1]; } else { returnValue = new String[2]; string = "/" + resource.getName() + "/"; returnValue[0] = string; } } else { returnValue = new String[1]; } IPath path = resource.getProjectRelativePath(); String string = path.toString(); if (returnValue.length == 2) { returnValue[1] = string; } else { returnValue[0] = string; } return returnValue; } }