/* * 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.annotations.config.binding; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collection; import org.compass.annotations.Cascade; import org.compass.annotations.Index; import org.compass.annotations.ManagedId; import org.compass.annotations.ManagedIdIndex; import org.compass.annotations.OmitNorms; import org.compass.annotations.OmitTf; import org.compass.annotations.Reverse; import org.compass.annotations.Store; import org.compass.annotations.TermVector; import org.compass.core.Property; import org.compass.core.mapping.ExcludeFromAll; import org.compass.core.mapping.ReverseType; /** * @author kimchy */ public abstract class AnnotationsBindingUtils { public static String getCollectionParameterClassName(Class<?> clazz, Type type) { Class retVal = getCollectionParameterClass(clazz, type); if (retVal == null) { return null; } return retVal.getName(); } public static Class getCollectionParameterClass(Class<?> clazz, Type type) { if (Collection.class.isAssignableFrom(clazz)) { if (type instanceof ParameterizedType) { ParameterizedType paramType = (ParameterizedType) type; Type[] actualTypeArguments = paramType.getActualTypeArguments(); if (actualTypeArguments != null && actualTypeArguments.length == 1) { return (Class) actualTypeArguments[0]; } } } return null; } public static org.compass.core.mapping.osem.ManagedId convert(ManagedId managedId) throws IllegalArgumentException { if (managedId == ManagedId.NA) { return null; } else if (managedId == ManagedId.AUTO) { return org.compass.core.mapping.osem.ManagedId.AUTO; } else if (managedId == ManagedId.TRUE) { return org.compass.core.mapping.osem.ManagedId.TRUE; } else if (managedId == ManagedId.FALSE) { return org.compass.core.mapping.osem.ManagedId.FALSE; } else if (managedId == ManagedId.NO) { return org.compass.core.mapping.osem.ManagedId.NO; } else if (managedId == ManagedId.NO_STORE) { return org.compass.core.mapping.osem.ManagedId.NO_STORE; } throw new IllegalArgumentException("Failed to convert managedId [" + managedId + "]"); } public static Property.TermVector convert(TermVector termVector) throws IllegalArgumentException { if (termVector == TermVector.NA) { return null; } else if (termVector == TermVector.NO) { return Property.TermVector.NO; } else if (termVector == TermVector.YES) { return Property.TermVector.YES; } else if (termVector == TermVector.WITH_POSITIONS) { return Property.TermVector.WITH_POSITIONS; } else if (termVector == TermVector.WITH_OFFSETS) { return Property.TermVector.WITH_OFFSETS; } else if (termVector == TermVector.WITH_POSITIONS_OFFSETS) { return Property.TermVector.WITH_POSITIONS_OFFSETS; } throw new IllegalArgumentException("Failed to convert termVectory [" + termVector + "]"); } public static ReverseType convert(Reverse reverse) throws IllegalArgumentException { if (reverse == Reverse.NO) { return ReverseType.NO; } else if (reverse == Reverse.READER) { return ReverseType.READER; } else if (reverse == Reverse.STRING) { return ReverseType.STRING; } throw new IllegalArgumentException("Failed to convert reverse [" + reverse + "]"); } public static ExcludeFromAll convert(org.compass.annotations.ExcludeFromAll excludeFromAll) throws IllegalArgumentException { if (excludeFromAll == org.compass.annotations.ExcludeFromAll.NO) { return ExcludeFromAll.NO; } else if (excludeFromAll == org.compass.annotations.ExcludeFromAll.NO_ANALYZED) { return ExcludeFromAll.NO_ANALYZED; } else if (excludeFromAll == org.compass.annotations.ExcludeFromAll.YES) { return ExcludeFromAll.YES; } throw new IllegalArgumentException("Failed to convert exclude from all [" + excludeFromAll + "]"); } public static Boolean convert(OmitNorms omitNorms) { if (omitNorms == OmitNorms.NA) { return null; } else if (omitNorms == OmitNorms.YES) { return true; } else if (omitNorms == OmitNorms.NO) { return false; } throw new IllegalArgumentException("Failed to convert omitNorms [" + omitNorms + "]"); } public static Boolean convert(OmitTf omitTf) { if (omitTf == OmitTf.NA) { return null; } else if (omitTf == OmitTf.YES) { return true; } else if (omitTf == OmitTf.NO) { return false; } throw new IllegalArgumentException("Failed to convert omitTf [" + omitTf + "]"); } public static Property.Store convert(Store store) throws IllegalArgumentException { if (store == Store.NA) { return null; } else if (store == Store.NO) { return Property.Store.NO; } else if (store == Store.YES) { return Property.Store.YES; } else if (store == Store.COMPRESS) { return Property.Store.COMPRESS; } throw new IllegalArgumentException("Failed to convert store [" + store + "]"); } public static Property.Index convert(Index index) throws IllegalArgumentException { if (index == Index.NA) { return null; } else if (index == Index.NO) { return Property.Index.NO; } else if (index == Index.ANALYZED) { return Property.Index.ANALYZED; } else if (index == Index.NOT_ANALYZED) { return Property.Index.NOT_ANALYZED; } else if (index == Index.TOKENIZED) { return Property.Index.TOKENIZED; } else if (index == Index.UN_TOKENIZED) { return Property.Index.UN_TOKENIZED; } throw new IllegalArgumentException("Failed to convert index [" + index + "]"); } public static Property.Index convert(ManagedIdIndex index) throws IllegalArgumentException { if (index == ManagedIdIndex.NA) { return null; } else if (index == ManagedIdIndex.NO) { return Property.Index.NO; } else if (index == ManagedIdIndex.NOT_ANALYZED) { return Property.Index.NOT_ANALYZED; } else if (index == ManagedIdIndex.UN_TOKENIZED) { return Property.Index.UN_TOKENIZED; } throw new IllegalArgumentException("Failed to convert index [" + index + "]"); } public static org.compass.core.mapping.Cascade convert(Cascade cascade) throws IllegalArgumentException { if (cascade == Cascade.ALL) { return org.compass.core.mapping.Cascade.ALL; } else if (cascade == Cascade.CREATE) { return org.compass.core.mapping.Cascade.CREATE; } else if (cascade == Cascade.DELETE) { return org.compass.core.mapping.Cascade.DELETE; } else if (cascade == Cascade.SAVE) { return org.compass.core.mapping.Cascade.SAVE; } throw new IllegalArgumentException("Failed to convert cascade [" + cascade + "]"); } }