/* * Copyright 2004-2009 the original author or authors. * * 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 org.compass.core.config; import java.io.File; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.List; import java.util.Set; import org.compass.core.config.binding.MappingBinding; import org.compass.core.mapping.ContractMapping; import org.compass.core.mapping.MappingException; import org.compass.core.mapping.ResourceMapping; import org.compass.core.mapping.internal.InternalCompassMapping; import org.compass.core.metadata.CompassMetaData; /** * Compass {@link org.compass.core.config.binding.MappingBinding} is a mapping binding that holds * a list of {@link org.compass.core.config.binding.MappingBinding}s (ordered) and when trying to * add mappings, it will iterate through them and try and add it to each one. * * @author kimchy */ public class CompassMappingBinding implements MappingBinding { private List<MappingBinding> mappingBindings = new ArrayList<MappingBinding>(); private InternalCompassMapping mapping; private String[] suffixes; public void addMappingBinding(MappingBinding mappingBinding) { this.mappingBindings.add(mappingBinding); } public void setUpBinding(InternalCompassMapping mapping, CompassMetaData metaData, CompassSettings settings) { this.mapping = mapping; for (MappingBinding mappingBinding : mappingBindings) { (mappingBinding).setUpBinding(mapping, metaData, settings); } Set<String> suffixes = new HashSet<String>(); for (MappingBinding mappingBinding : mappingBindings) { if (mappingBinding.getSuffixes() != null) { suffixes.addAll(Arrays.asList(mappingBinding.getSuffixes())); } } this.suffixes = suffixes.toArray(new String[suffixes.size()]); } public boolean addResourceMapping(ResourceMapping resourceMapping) throws ConfigurationException, MappingException { mapping.addMapping(resourceMapping); return true; } public boolean addContractMaping(ContractMapping contractMapping) throws ConfigurationException, MappingException { mapping.addMapping(contractMapping); return true; } public boolean addResource(String path) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addResource(path); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addResource(String path, ClassLoader classLoader) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addResource(path, classLoader); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addURL(URL url) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addURL(url); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addDirectory(File dir) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addDirectory(dir); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addJar(File jar) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addJar(jar); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addFile(String filePath) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addFile(filePath); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addFile(File file) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addFile(file); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addPackage(String packageName) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addPackage(packageName); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addClass(Class clazz) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addClass(clazz); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addMappingResolver(InputStreamMappingResolver mappingResolver) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addMappingResolver(mappingResolver); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public boolean addInputStream(InputStream is, String resourceName) throws ConfigurationException, MappingException { boolean hasAddedResource = false; for (MappingBinding mappingBinding : mappingBindings) { boolean retVal = mappingBinding.addInputStream(is, resourceName); if (retVal) { hasAddedResource = true; } } return hasAddedResource; } public String[] getSuffixes() { return this.suffixes; } }