001: /***************************************************************
002: * This file is part of the [fleXive](R) project.
003: *
004: * Copyright (c) 1999-2008
005: * UCS - unique computing solutions gmbh (http://www.ucs.at)
006: * All rights reserved
007: *
008: * The [fleXive](R) project is free software; you can redistribute
009: * it and/or modify it under the terms of the GNU General Public
010: * License as published by the Free Software Foundation;
011: * either version 2 of the License, or (at your option) any
012: * later version.
013: *
014: * The GNU General Public License can be found at
015: * http://www.gnu.org/copyleft/gpl.html.
016: * A copy is found in the textfile GPL.txt and important notices to the
017: * license from the author are found in LICENSE.txt distributed with
018: * these libraries.
019: *
020: * This library is distributed in the hope that it will be useful,
021: * but WITHOUT ANY WARRANTY; without even the implied warranty of
022: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
023: * GNU General Public License for more details.
024: *
025: * For further information about UCS - unique computing solutions gmbh,
026: * please see the company website: http://www.ucs.at
027: *
028: * For further information about [fleXive](R), please see the
029: * project website: http://www.flexive.org
030: *
031: *
032: * This copyright notice MUST APPEAR in all copies of the file!
033: ***************************************************************/package com.flexive.shared.search;
034:
035: import org.apache.commons.lang.StringUtils;
036:
037: import java.util.ArrayList;
038: import java.util.List;
039: import java.io.Serializable;
040:
041: /**
042: * Tree-paths returned by queries
043: *
044: * @author Gregor Schober (gregor.schober@flexive.com), UCS - unique computing solutions gmbh (http://www.ucs.at)
045: */
046: public class FxPaths implements Serializable {
047: private static final long serialVersionUID = -810354430866830163L;
048: private final List<Path> paths;
049:
050: /**
051: * This object represents a single path, eg '/Images/myFolder/myFile.txt'
052: */
053: public static class Path implements Serializable {
054: private static final long serialVersionUID = -4533408073950150665L;
055: private List<Item> items;
056: private String caption = "";
057:
058: /**
059: * Constructor.
060: *
061: * @param encoded the encoded path
062: */
063: public Path(String encoded) {
064: String split[] = encoded.substring(1).split("/");
065: items = new ArrayList<Item>(split.length);
066: for (String item : split) {
067: final Item aItem = new Item(item);
068: items.add(aItem);
069: caption += "/" + aItem.getCaption();
070: }
071: }
072:
073: /**
074: * Returns all items of the path in the correct order.
075: * <p />
076: * The path '/Images/myFolder/myFile.txt' will return the items
077: * Images, myFolder and myFile.txt
078: *
079: * @return all items of the path
080: */
081: public List<Item> getItems() {
082: return items;
083: }
084:
085: /**
086: * Getter for the path caption, eg '/Images/myFolder/myFile.txt'.
087: *
088: * @return the path caption
089: */
090: public String getCaption() {
091: return caption;
092: }
093: }
094:
095: /**
096: * This object represebts a item within a path, eg 'myFolder' in the path
097: * '/Images/myFolder/myFile.txt'.
098: */
099: public static class Item implements Serializable {
100: private static final long serialVersionUID = 1498578471619916869L;
101: private String caption;
102: private long nodeId;
103: private long referenceId;
104: private long contentTypeId;
105:
106: /**
107: * Constructor.
108: *
109: * @param encodedPath the encoded path, item informations are separated by a ':'
110: */
111: private Item(String encodedPath) {
112: String split[] = encodedPath.split(":");
113: caption = split[0];
114: nodeId = Long.valueOf(split[1]);
115: referenceId = Long.valueOf(split[2]);
116: contentTypeId = Long.valueOf(split[3]);
117: }
118:
119: /**
120: * Getter for the caption of the item.
121: *
122: * @return the caption
123: */
124: public String getCaption() {
125: return caption;
126: }
127:
128: /**
129: * Gerrer for the node id of the item.
130: *
131: * @return the node id
132: */
133: public long getNodeId() {
134: return nodeId;
135: }
136:
137: /**
138: * Getter for the reference id of the item.
139: *
140: * @return the refrence id
141: */
142: public long getReferenceId() {
143: return referenceId;
144: }
145:
146: /**
147: * Returns the referenced content type id of the item, or -1 if the reference is not set.
148: *
149: * @return the referenced content type id, or -1
150: */
151: public long getContentTypeId() {
152: return contentTypeId;
153: }
154: }
155:
156: /**
157: * Decodes the given DB string into a FxPaths object.
158: * <p/>
159: * The encoded paths are separated by a newline ('\n').<br>
160: * The items within a path are separated by a '/' character.<br>
161: * The informations within the a path item are separated by a ':' character
162: *
163: * @param encoded the encoded string
164: */
165: public FxPaths(String encoded) {
166: if (StringUtils.isBlank(encoded)) {
167: paths = new ArrayList<Path>(0);
168: } else {
169: final String[] pathArray = encoded.trim().split("\n");
170: this .paths = new ArrayList<Path>(pathArray.length);
171: for (String path : pathArray) {
172: this .paths.add(new Path(path));
173: }
174: }
175: }
176:
177: /**
178: * Returns all paths.
179: *
180: * @return the paths
181: */
182: public List<Path> getPaths() {
183: return paths;
184: }
185:
186: /**
187: * {@inheritDoc} *
188: */
189: @Override
190: public String toString() {
191: if (paths == null)
192: return "";
193: String result = "";
194: for (Path path : paths) {
195: if (result.length() > 0)
196: result += "\n";
197: result += path.getCaption();
198: }
199: return result;
200: }
201: }
|