001/** 002 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# 003 * This file is part of the LDP4j Project: 004 * http://www.ldp4j.org/ 005 * 006 * Center for Open Middleware 007 * http://www.centeropenmiddleware.com/ 008 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# 009 * Copyright (C) 2014-2016 Center for Open Middleware. 010 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# 011 * Licensed under the Apache License, Version 2.0 (the "License"); 012 * you may not use this file except in compliance with the License. 013 * You may obtain a copy of the License at 014 * 015 * http://www.apache.org/licenses/LICENSE-2.0 016 * 017 * Unless required by applicable law or agreed to in writing, software 018 * distributed under the License is distributed on an "AS IS" BASIS, 019 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 020 * See the License for the specific language governing permissions and 021 * limitations under the License. 022 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# 023 * Artifact : org.ldp4j.framework:ldp4j-application-api:0.2.1 024 * Bundle : ldp4j-application-api-0.2.1.jar 025 * #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=# 026 */ 027package org.ldp4j.application.data; 028 029import java.net.URI; 030 031public final class FormatUtils { 032 033 private static final class IdFormatter implements IndividualVisitor { 034 035 private String format; 036 037 private IdFormatter() { 038 } 039 040 private String getFormat() { 041 return this.format; 042 } 043 044 @Override 045 public void visitManagedIndividual(ManagedIndividual individual) { 046 this.format=formatManagedIndividualId(individual.id()); 047 } 048 049 @Override 050 public void visitRelativeIndividual(RelativeIndividual individual) { 051 this.format=formatRelativeIndividualId(individual.id()); 052 } 053 054 @Override 055 public void visitLocalIndividual(LocalIndividual individual) { 056 this.format=formatLocalIndividualId(individual.id()); 057 } 058 059 @Override 060 public void visitExternalIndividual(ExternalIndividual individual) { 061 this.format=formatExternalIndividualId(individual.id()); 062 } 063 064 @Override 065 public void visitNewIndividual(NewIndividual individual) { 066 this.format=formatNewIndividualId(individual.id()); 067 } 068 069 } 070 071 private static final class LiteralFormatter implements LiteralVisitor { 072 073 private String format; 074 075 private LiteralFormatter() { 076 } 077 078 @Override 079 public void visitLiteral(Literal<?> literal) { 080 this.format=String.format(SIMPLE_FORMAT,literal.get(),literal.get().getClass().getCanonicalName()); 081 } 082 083 @Override 084 public void visitTypedLiteral(TypedLiteral<?> literal) { 085 this.format=String.format(COMPOSITE_FORMAT,literal.get(),literal.type(),literal.get().getClass().getCanonicalName()); 086 } 087 088 @Override 089 public void visitLanguageLiteral(LanguageLiteral literal) { 090 this.format=String.format(COMPOSITE_FORMAT,literal.get(),literal.language(),literal.get().getClass().getCanonicalName()); 091 } 092 093 private String getFormat() { 094 return this.format; 095 } 096 097 } 098 099 private static final class ValueFormatter implements ValueVisitor { 100 101 private String format=null; 102 103 private ValueFormatter() { 104 } 105 106 private String getFormat() { 107 return this.format; 108 } 109 110 @Override 111 public void visitLiteral(Literal<?> value) { 112 this.format=FormatUtils.formatLiteral(value); 113 } 114 @Override 115 public void visitIndividual(Individual<?, ?> value) { 116 this.format=FormatUtils.formatId(value); 117 } 118 119 } 120 121 private static final class PropertyValueFormatter implements ValueVisitor { 122 123 private final StringBuilder builder; 124 125 private PropertyValueFormatter(StringBuilder builder) { 126 this.builder = builder; 127 } 128 129 private void formatValue(String str) { 130 this.builder.append(TAB).append(TAB).append(TAB).append("* ").append(str).append(NL); 131 } 132 133 @Override 134 public void visitLiteral(Literal<?> value) { 135 formatValue(FormatUtils.formatLiteral(value)); 136 } 137 138 @Override 139 public void visitIndividual(Individual<?, ?> value) { 140 formatValue(FormatUtils.formatId(value)); 141 } 142 143 } 144 145 private static final String BLOCK_START = ") {"; 146 private static final String BLOCK_END = "}"; 147 private static final String TAB = "\t"; 148 private static final String NL =System.lineSeparator(); 149 150 151 private static final String NEW_ID_FORMAT = "<%s> {New}"; 152 private static final String RELATIVE_ID_FORMAT = "<%s> {Parent: %s}"; 153 private static final String MANAGED_ID_INDIRECT_FORMAT = "%s {Managed by: %s, indirect id: <%s>}"; 154 private static final String MANAGED_ID_FORMAT = "%s {Managed by: %s}"; 155 private static final String LOCAL_ID_FORMAT = "%s [%s] {Local}"; 156 private static final String EXTERNAL_ID_FORMAT = "<%s> {External}"; 157 private static final String COMPOSITE_FORMAT = "%s (%s) [%s]"; 158 private static final String SIMPLE_FORMAT = "%s [%s]"; 159 private static final String NULL = "<null>"; 160 161 private FormatUtils() { 162 } 163 164 private static String formatNewIndividualId(Object id) { 165 return String.format(NEW_ID_FORMAT, id); 166 } 167 168 private static String formatExternalIndividualId(Object id) { 169 return String.format(EXTERNAL_ID_FORMAT,id); 170 } 171 172 private static String formatLocalIndividualId(Name<?> name) { 173 return String.format(LOCAL_ID_FORMAT,name,name.getClass().getCanonicalName()); 174 } 175 176 private static String formatRelativeIndividualId(RelativeIndividualId rid) { 177 return String.format(RELATIVE_ID_FORMAT,rid.path(),rid.parentId()); 178 } 179 180 private static String formatManagedIndividualId(ManagedIndividualId mId) { 181 String result=null; 182 if(mId.indirectId()==null) { 183 result=String.format(MANAGED_ID_FORMAT,mId.name(),mId.managerId()); 184 } else { 185 result=String.format(MANAGED_ID_INDIRECT_FORMAT,mId.name(),mId.managerId(),mId.indirectId()); 186 } 187 return result; 188 } 189 190 public static String formatLiteral(final Literal<?> literal) { 191 if(literal==null) { 192 return NULL; 193 } 194 LiteralFormatter literalFormatter = new LiteralFormatter(); 195 literal.accept(literalFormatter); 196 return literalFormatter.getFormat(); 197 } 198 199 public static String formatName(Name<?> name) { 200 if(name==null) { 201 return NULL; 202 } 203 return String.format(SIMPLE_FORMAT,name.id(),name.id().getClass().getCanonicalName()); 204 } 205 206 public static String formatId(Individual<?, ?> individual) { 207 if(individual==null) { 208 return NULL; 209 } 210 IdFormatter formatter = new IdFormatter(); 211 individual.accept(formatter); 212 return formatter.getFormat(); 213 } 214 215 public static String formatId(Object id) { 216 String result = NULL; 217 if(id==null) { 218 return result; 219 } 220 221 if(id instanceof URI) { 222 result=formatExternalIndividualId(id); 223 } else if(id instanceof Name<?>) { 224 result=formatLocalIndividualId((Name<?>)id); 225 } else if(id instanceof ManagedIndividualId) { 226 result=formatManagedIndividualId((ManagedIndividualId)id); 227 } else if(id instanceof RelativeIndividualId){ 228 result=formatRelativeIndividualId((RelativeIndividualId)id); 229 } else { 230 result=formatNewIndividualId(id); 231 } 232 return result; 233 } 234 235 public static String formatValue(Value value) { 236 if(value==null) { 237 return NULL; 238 } 239 ValueFormatter formatter=new ValueFormatter(); 240 value.accept(formatter); 241 return formatter.getFormat(); 242 } 243 public static String formatDataSet(DataSet dataSet) { 244 if(dataSet==null) { 245 return NULL; 246 } 247 248 StringBuilder builder=new StringBuilder(); 249 builder.append("DataSet(").append(FormatUtils.formatName(dataSet.name())).append(BLOCK_START).append(NL); 250 for(Individual<?,?> individual:dataSet.individuals()) { 251 if(individual.hasProperties()) { 252 formatIndividual(builder, individual); 253 } 254 } 255 builder.append(BLOCK_END); 256 return builder.toString(); 257 } 258 259 private static void formatIndividual(StringBuilder builder, Individual<?, ?> individual) { 260 PropertyValueFormatter formatter=new PropertyValueFormatter(builder); 261 builder.append(TAB).append("- Individual(").append(FormatUtils.formatId(individual)).append(BLOCK_START).append(NL); 262 for(Property property:individual) { 263 builder.append(TAB).append(TAB).append("+ Property(").append(property.predicate()).append(BLOCK_START).append(NL); 264 for(Value value:property) { 265 value.accept(formatter); 266 } 267 builder.append(TAB).append(TAB).append(BLOCK_END).append(NL); 268 } 269 builder.append(TAB).append(BLOCK_END).append(NL); 270 } 271 272 273}