1 /**
2 * Copyright 2005-2011 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.rice.krad.util.documentserializer;
17
18 /**
19 * This class represents metadata about the serializibility of a property during the document serialization proces..
20 */
21 public interface PropertySerializabilityMetadata {
22 /**
23 * See docs for the elements of this enum
24 */
25 public enum PropertySerializability {
26 /**
27 * Indicates that the property represented by this metadata object should be serialized (i.e. have an open
28 * and close XML tag rendered) as well as all of the property's primitives. It does not mean that all child
29 * non-primitive properties should be serialized. Child non-primitives are only serialized if a call to
30 * {@link PropertySerializabilityMetadata#getSerializableSubProperty(String)} returns a non-null result when
31 * the child property name is passed in.
32 */
33 SERIALIZE_OBJECT_AND_ALL_PRIMITIVES,
34
35 /**
36 * Indicates that the property represented by this metadata object should be serialized (i.e. have an open
37 * and close XML tag rendered). Child properties (primitive or otherwise) are only serialized if a call to
38 * {@link PropertySerializabilityMetadata#getSerializableSubProperty(String)} returns a non-null result when
39 * the child property name is passed in.
40 */
41 SERIALIZE_OBJECT
42 }
43
44 /**
45 * Returns the serializability of this property. See {@link PropertySerializability}.
46 *
47 * @return
48 */
49 public PropertySerializability getPropertySerializability();
50
51 /**
52 * Returns the full path string of the property corresponding to this metadata.
53 *
54 * @return
55 */
56 public String getPathString();
57
58 /**
59 * Returns metadata bout a child property, if it exists
60 *
61 * @param childPropertyName the name of a child property, relative to this property (i.e. no .'s in the name)
62 * @return null if there is no child property with the specified name, otherwise, metadata about the child
63 */
64 public PropertySerializabilityMetadata getSerializableChildProperty(String childPropertyName);
65 }