001: /*
002: * Copyright 2004-2006 the original author or authors.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: */
016:
017: package org.compass.core.mapping;
018:
019: import org.compass.core.CompassException;
020: import org.compass.core.util.Parameter;
021:
022: /**
023: * Cascade mappings responsible for getting objects for cascading
024: * operations as well as marking which operations are allowed to
025: * be cascaded.
026: *
027: * @author kimchy
028: */
029: public interface CascadeMapping {
030:
031: /**
032: * A cascade enumeration of operations allowed for cascading.
033: */
034: public static final class Cascade extends Parameter {
035:
036: private Cascade(String name) {
037: super (name);
038: }
039:
040: public static final Cascade DELETE = new Cascade("DELETE");
041:
042: public static final Cascade SAVE = new Cascade("SAVE");
043:
044: public static final Cascade CREATE = new Cascade("CREATE");
045:
046: public static final Cascade ALL = new Cascade("ALL");
047:
048: public static String toString(Cascade cascade) {
049: if (cascade == Cascade.DELETE) {
050: return "delete";
051: } else if (cascade == Cascade.SAVE) {
052: return "save";
053: } else if (cascade == Cascade.CREATE) {
054: return "create";
055: } else if (cascade == Cascade.ALL) {
056: return "all";
057: }
058: throw new IllegalArgumentException(
059: "Can't find cascade for [" + cascade + "]");
060: }
061:
062: public static Cascade fromString(String cascade) {
063: if ("delete".equalsIgnoreCase(cascade)) {
064: return Cascade.DELETE;
065: } else if ("save".equalsIgnoreCase(cascade)) {
066: return Cascade.SAVE;
067: } else if ("create".equalsIgnoreCase(cascade)) {
068: return Cascade.CREATE;
069: } else if ("all".equalsIgnoreCase(cascade)) {
070: return Cascade.ALL;
071: }
072: throw new IllegalArgumentException(
073: "Can't find cascade for [" + cascade + "]");
074: }
075: }
076:
077: /**
078: * Returns the value that should be cascaded basde on the root object.
079: *
080: * @param root The root object to extract the cascaded value from
081: * @return The cascaded value to cascade
082: * @throws CompassException
083: */
084: Object getCascadeValue(Object root) throws CompassException;
085:
086: void setCascades(Cascade[] cascades);
087:
088: Cascade[] getCascades();
089:
090: /**
091: * Returns <code>true</code> if cascading should be performed for delete
092: * operations.
093: */
094: boolean shouldCascadeDelete();
095:
096: /**
097: * Returns <code>true</code> if cascading should be performed for create
098: * operations.
099: */
100: boolean shouldCascadeCreate();
101:
102: /**
103: * Returns <code>true</code> if cascading should be performed for save
104: * operations.
105: */
106: boolean shouldCascadeSave();
107:
108: /**
109: * Returns <code>true</code> if cascading should be performed for the
110: * cascade parameter.
111: */
112: boolean shouldCascade(Cascade cascade);
113: }
|