/* * Copyright 2013 Sławomir Śledź <slawomir.sledz@sof-tech.pl>. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package pl.softech.eav.example; import java.util.Collection; import pl.softech.eav.domain.dictionary.DictionaryEntry; import pl.softech.eav.domain.object.MyObject; import pl.softech.eav.domain.value.ObjectValue; import com.google.common.base.Function; import com.google.common.collect.Collections2; /** * @author Sławomir Śledź <slawomir.sledz@sof-tech.pl> * @since 1.2 */ public class Util { private static final Function<DictionaryEntry, String> DICT_2_STRING = new Function<DictionaryEntry, String>() { @Override public String apply(DictionaryEntry input) { return input.getName(); } }; private static String toString(DictionaryEntry entry) { return entry == null ? null : DICT_2_STRING.apply(entry); } private static Collection<String> toString(Collection<DictionaryEntry> entries) { return entries == null ? null : Collections2.transform(entries, DICT_2_STRING); } private static String toString(ObjectValue vakue, int ntabs) { if (vakue == null) { return null; } SimpleToStringBuilder sb = new SimpleToStringBuilder("ObjectValue", ntabs); sb.add("attribute", vakue.getAttribute().getName()); sb.add("value", vakue.getValueAsString()); return sb.toString(); } private static String toString(MyObject object, final int ntabs) { if (object == null) { return null; } SimpleToStringBuilder sb = new SimpleToStringBuilder("MyObject", ntabs); sb.add("name", object.getName()); sb.add("category", object.getCategory().getIdentifier().getIdentifier()); sb.add("values", collectionToString(Collections2.transform(object.getValues(), new Function<ObjectValue, String>() { @Override public String apply(ObjectValue input) { return Util.toString(input, ntabs + 2); } }), ntabs + 1)); return sb.toString(); } private static String toString(Computer computer, int ntabs) { if (computer == null) { return null; } SimpleToStringBuilder sb = new SimpleToStringBuilder("Computer", ntabs); sb.add("Make", Util.toString(computer.getMake())); sb.add("drive", computer.getDrive()); sb.add("battery", computer.getBattery()); sb.add("cpu", computer.getCpu()); sb.add("model", computer.getModel()); sb.add("optical", computer.getOptical()); sb.add("os", Util.toString(computer.getOs())); sb.add("purshaseDate", computer.getPurshaseDate()); sb.add("ram", computer.getRam()); sb.add("screen", computer.getScreen()); sb.add("video", computer.getVideo()); sb.add("type", Util.toString(computer.getType())); return sb.toString(); } private static String toStringShort(Person person, int ntabs) { SimpleToStringBuilder builder = new SimpleToStringBuilder("Person", ntabs); builder.add("firstname", person.getFirstname()); builder.add("lastname", person.getLastname()); builder.add("age", person.getAge()); return builder.toString(); } public static String toString(Person person) { return toString(person, 1); } public static String toString(Person person, final int ntabs) { SimpleToStringBuilder builder = new SimpleToStringBuilder("Person", ntabs); builder.add("firstname", person.getFirstname()); builder.add("lastname", person.getLastname()); builder.add("age", person.getAge()); if (person.getComputer() != null) { builder.add("Computer", "\n" + ntabs(ntabs + 1) + Util.toString(person.getComputer(), ntabs + 2)); } if (person.getParent() != null) { builder.add("parent", "\n" + ntabs(ntabs + 1) + Util.toString(person.getParent(), ntabs + 2)); } if (person.getFriends() != null) { builder.add("friends", collectionToString(Collections2.transform(person.getFriends(), new Function<Person, String>() { @Override public String apply(Person input) { return Util.toStringShort(input, ntabs + 2); } }), ntabs + 1)); } return builder.toString(); } private static String collectionToString(Collection<String> args, int ntabs) { String t = ntabs(ntabs); StringBuilder builder = new StringBuilder(); for (Object obj : args) { builder.append("\n").append(t).append(obj.toString()); } return builder.toString(); } private static final String TAB = " "; private static String ntabs(int ntabs) { String t = ""; for (int i = 0; i < ntabs; i++) { t += TAB; } return t; } private static class SimpleToStringBuilder { private final StringBuilder builder = new StringBuilder(); private String nlt = "\n"; public SimpleToStringBuilder(String className, int ntabs) { builder.append("[").append(className).append("]"); nlt += ntabs(ntabs); } public SimpleToStringBuilder add(String name, Object value) { builder.append(nlt).append(name).append(" = ").append(value); return this; } @Override public String toString() { return builder.toString(); } } }