001 /** 002 * =========================================================== 003 * LibRepository : a free Java content repository access layer 004 * =========================================================== 005 * 006 * Project Info: http://jfreereport.pentaho.org/librepository/ 007 * 008 * (C) Copyright 2006, by Pentaho Corporation and Contributors. 009 * 010 * This library is free software; you can redistribute it and/or modify it under the terms 011 * of the GNU Lesser General Public License as published by the Free Software Foundation; 012 * either version 2.1 of the License, or (at your option) any later version. 013 * 014 * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 015 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 016 * See the GNU Lesser General Public License for more details. 017 * 018 * You should have received a copy of the GNU Lesser General Public License along with this 019 * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, 020 * Boston, MA 02111-1307, USA. 021 * 022 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 023 * in the United States and other countries.] 024 * 025 * ------------ 026 * RepositoryUtilities.java 027 * ------------ 028 * (C) Copyright 2006, by Pentaho Corporation. 029 */ 030 031 package org.jfree.repository; 032 033 import java.util.StringTokenizer; 034 import java.util.ArrayList; 035 import java.util.LinkedList; 036 037 /** 038 * Creation-Date: 02.12.2006, 13:38:01 039 * 040 * @author Thomas Morgner 041 */ 042 public class RepositoryUtilities 043 { 044 private RepositoryUtilities() 045 { 046 047 } 048 049 public static ContentEntity getEntity (final Repository repository, final String[] name) 050 throws ContentIOException 051 { 052 if (name.length == 0) 053 { 054 return repository.getRoot(); 055 } 056 057 ContentLocation node = repository.getRoot(); 058 for (int i = 0; i < name.length - 1; i++) 059 { 060 final String nameItem = name[i]; 061 final ContentEntity entry = node.getEntry(nameItem); 062 if (entry instanceof ContentLocation == false) 063 { 064 // its ok, if we hit the last item 065 throw new ContentIOException("No such item."); 066 } 067 node = (ContentLocation) entry; 068 } 069 return node.getEntry(name[name.length - 1]); 070 } 071 072 public static ContentItem createItem (final Repository repository, final String[] name) 073 throws ContentIOException 074 { 075 if (name.length == 0) 076 { 077 throw new IllegalArgumentException("Empty name not permitted."); 078 } 079 080 ContentLocation node = repository.getRoot(); 081 for (int i = 0; i < name.length - 1; i++) 082 { 083 final String nameItem = name[i]; 084 if (node.exists(nameItem) == false) 085 { 086 // create it 087 node = node.createLocation(nameItem); 088 } 089 else 090 { 091 final ContentEntity entry = node.getEntry(nameItem); 092 if (entry instanceof ContentLocation == false) 093 { 094 // its ok, if we hit the last item 095 throw new ContentIOException("No such item."); 096 } 097 node = (ContentLocation) entry; 098 } 099 } 100 return node.createItem(name[name.length - 1]); 101 } 102 103 public static ContentLocation createLocation (final Repository repository, final String[] name) 104 throws ContentIOException 105 { 106 if (name.length == 0) 107 { 108 throw new IllegalArgumentException("Empty name not permitted."); 109 } 110 111 ContentLocation node = repository.getRoot(); 112 for (int i = 0; i < name.length - 1; i++) 113 { 114 final String nameItem = name[i]; 115 if (node.exists(nameItem) == false) 116 { 117 // create it 118 node = node.createLocation(nameItem); 119 } 120 else 121 { 122 final ContentEntity entry = node.getEntry(nameItem); 123 if (entry instanceof ContentLocation == false) 124 { 125 // its ok, if we hit the last item 126 throw new ContentIOException("No such item."); 127 } 128 node = (ContentLocation) entry; 129 } 130 } 131 return node.createLocation(name[name.length - 1]); 132 } 133 134 public static String[] split (final String name, final String separator) 135 { 136 final StringTokenizer strtok = new StringTokenizer(name, separator, false); 137 final int tokenCount = strtok.countTokens(); 138 final String[] retval = new String[tokenCount]; 139 int i = 0; 140 while (strtok.hasMoreTokens()) 141 { 142 retval[i] = strtok.nextToken(); 143 i += 1; 144 } 145 return retval; 146 } 147 148 public static String[] buildNameArray (ContentEntity entity) 149 { 150 final LinkedList collector = new LinkedList(); 151 while (entity != null) 152 { 153 final ContentLocation parent = entity.getParent(); 154 if (parent != null) 155 { 156 // this filters out the root .. 157 collector.add(0, entity.getName()); 158 } 159 entity = parent; 160 } 161 return (String[]) collector.toArray(new String[collector.size()]); 162 } 163 164 public static String buildName (ContentEntity entity, final String separator) 165 { 166 final ArrayList collector = new ArrayList(); 167 while (entity != null) 168 { 169 final ContentLocation parent = entity.getParent(); 170 if (parent != null) 171 { 172 // this filters out the root .. 173 collector.add(entity.getName()); 174 } 175 entity = parent; 176 } 177 178 final StringBuffer builder = new StringBuffer(); 179 final int maxIdx = collector.size() - 1; 180 for (int i = maxIdx; i >= 0; i--) 181 { 182 final String s = (String) collector.get(i); 183 if (i != maxIdx) 184 { 185 builder.append(separator); 186 } 187 builder.append(s); 188 } 189 return builder.toString(); 190 } 191 }