/* * Copyright (c) 2007 BUSINESS OBJECTS SOFTWARE LIMITED * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * * 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. * * * Neither the name of Business Objects nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS 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 COPYRIGHT OWNER OR 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. */ /* * MetadataPathStoreHelper.java * Creation date: Nov 23, 2004. * By: Edward Lam */ package org.openquark.cal.metadata; import java.util.ArrayList; import java.util.List; import org.openquark.cal.compiler.ModuleName; import org.openquark.cal.services.AbstractResourcePathStore; import org.openquark.cal.services.CALFeatureName; import org.openquark.cal.services.ResourceName; import org.openquark.cal.services.ResourcePath; import org.openquark.cal.services.FeatureName.FeatureType; import org.openquark.cal.services.ResourcePath.Folder; /** * This is a helper class which contains methods to determine which features are present in a metadata path store. * @author Edward Lam */ class MetadataPathStoreHelper { /** The associated metadata path store */ private final AbstractResourcePathStore abstractMetadataPathStore; /** * Constructor for a MetadataPathStoreHelper. * @param abstractMetadataPathStore the associated metadata path store. */ public MetadataPathStoreHelper(AbstractResourcePathStore abstractMetadataPathStore) { this.abstractMetadataPathStore = abstractMetadataPathStore; } /** * Get the names of resources associated with the module. * @param moduleName the name of a module. * @return (List of ResourceName) the names of resources associated with the module. */ public List<ResourceName> getModuleResourceNameList(ModuleName moduleName) { List<ResourceName> metadataResourceNameList = new ArrayList<ResourceName>(); // Module fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.MODULE); // Functions fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.FUNCTION); // Class methods fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.CLASS_METHOD); // Data constructors fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.DATA_CONSTRUCTOR); // Type classes fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.TYPE_CLASS); // Type constructors fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.TYPE_CONSTRUCTOR); // Class instances fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.CLASS_INSTANCE); // Instance methods fillModuleResourceNameListByFeatureType(moduleName, metadataResourceNameList, CALFeatureName.INSTANCE_METHOD); return metadataResourceNameList; } /** * Fills the given list with the names of resources in the given module and of the given feature type. * @param moduleName the module of the resources. * @param metadataResourceNameList the list to be filled. * @param featureType the feature type of the resources whose names are to be returned. */ private void fillModuleResourceNameListByFeatureType(ModuleName moduleName, List<ResourceName> metadataResourceNameList, FeatureType featureType) { ResourcePath.Folder modulePath = getFeatureFolder(moduleName, featureType); for (final ResourceName resourceName : abstractMetadataPathStore.getFolderResourceNames(modulePath)) { metadataResourceNameList.add(resourceName); } } /** * @param moduleName the name of a CAL module. * @param featureType the type of a CAL feature. * @return the folder in which the feature's metadata should be stored. */ private Folder getFeatureFolder(ModuleName moduleName, FeatureType featureType) { return ((MetadataPathMapper)abstractMetadataPathStore.getPathMapper()).getFeatureFolder(moduleName, featureType); } /** * Constructs a filter for keeping only the resource names whose feature names match the given feature name. * @param featureName the desired feature name. * @return a ResourceName.Filter representing the desired filter. */ public ResourceName.Filter makeFeatureNameFilter(final CALFeatureName featureName) { return new ResourceName.Filter() { public boolean accept(ResourceName resourceName) { return resourceName.getFeatureName().equals(featureName); }}; } }