001 /* 002 * JBoss, Home of Professional Open Source. 003 * Copyright 2008, Red Hat Middleware LLC, and individual contributors 004 * as indicated by the @author tags. See the copyright.txt file in the 005 * distribution for a full listing of individual contributors. 006 * 007 * This is free software; you can redistribute it and/or modify it 008 * under the terms of the GNU Lesser General Public License as 009 * published by the Free Software Foundation; either version 2.1 of 010 * the License, or (at your option) any later version. 011 * 012 * This software is distributed in the hope that it will be useful, 013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 015 * Lesser General Public License for more details. 016 * 017 * You should have received a copy of the GNU Lesser General Public 018 * License along with this software; if not, write to the Free 019 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 020 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 021 */ 022 package org.jboss.dna.graph.commands.basic; 023 024 import java.util.Collection; 025 import java.util.HashMap; 026 import java.util.List; 027 import java.util.Map; 028 import net.jcip.annotations.NotThreadSafe; 029 import org.jboss.dna.common.util.StringUtil; 030 import org.jboss.dna.graph.commands.GetNodeCommand; 031 import org.jboss.dna.graph.properties.Name; 032 import org.jboss.dna.graph.properties.Path; 033 import org.jboss.dna.graph.properties.Property; 034 035 /** 036 * @author Randall Hauch 037 */ 038 @NotThreadSafe 039 public class BasicGetNodeCommand extends BasicGetChildrenCommand implements GetNodeCommand { 040 041 private static final long serialVersionUID = 5355669032301356873L; 042 private final Map<Name, Property> properties = new HashMap<Name, Property>(); 043 044 /** 045 * @param path 046 */ 047 public BasicGetNodeCommand( Path path ) { 048 super(path); 049 050 } 051 052 /** 053 * {@inheritDoc} 054 */ 055 public void setProperty( Property property ) { 056 if (property != null) { 057 properties.put(property.getName(), property); 058 } 059 } 060 061 public void setProperties( Map<Name, Property> properties ) { 062 this.properties.clear(); 063 if (properties != null) this.properties.putAll(properties); 064 } 065 066 /** 067 * Get the property values that were added to the command 068 * 069 * @return the map of property name to values 070 */ 071 public Collection<Property> getProperties() { 072 return this.properties.values(); 073 } 074 075 public Map<Name, Property> getPropertiesByName() { 076 return this.properties; 077 } 078 079 /** 080 * {@inheritDoc} 081 * 082 * @see java.lang.Object#toString() 083 */ 084 @Override 085 public String toString() { 086 StringBuilder sb = new StringBuilder(); 087 sb.append(this.getClass().getSimpleName()); 088 sb.append(" at "); 089 sb.append(this.getPath()); 090 boolean firstProperty = true; 091 for (Property property : this.getProperties()) { 092 if (property.isEmpty()) continue; 093 if (firstProperty) { 094 sb.append(" { "); 095 firstProperty = false; 096 } else { 097 sb.append("; "); 098 } 099 sb.append(property.getName()); 100 sb.append("="); 101 if (property.isSingle()) { 102 sb.append(StringUtil.readableString(property.getValues().next())); 103 } else { 104 sb.append(StringUtil.readableString(property.getValuesAsArray())); 105 } 106 } 107 if (!firstProperty) { 108 sb.append(" }"); 109 } 110 List<Path.Segment> children = this.getChildren(); 111 if (children != null && children.size() > 0) { 112 sb.append(" with ").append(children.size()).append(" children: "); 113 sb.append(StringUtil.readableString(children)); 114 } 115 return sb.toString(); 116 } 117 118 }