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.HashMap; 025 import java.util.Map; 026 import net.jcip.annotations.NotThreadSafe; 027 import org.jboss.dna.common.util.StringUtil; 028 import org.jboss.dna.graph.cache.CachePolicy; 029 import org.jboss.dna.graph.commands.GetPropertiesCommand; 030 import org.jboss.dna.graph.properties.DateTime; 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 BasicGetPropertiesCommand extends BasicGraphCommand implements GetPropertiesCommand { 040 041 /** 042 */ 043 private static final long serialVersionUID = -7816393217506909521L; 044 private final Map<Name, Property> properties = new HashMap<Name, Property>(); 045 private final Path path; 046 private CachePolicy cachePolicy; 047 private DateTime timeLoaded; 048 049 /** 050 * @param path the path to the node; may not be null 051 */ 052 public BasicGetPropertiesCommand( Path path ) { 053 super(); 054 assert path != null; 055 this.path = path; 056 } 057 058 /** 059 * {@inheritDoc} 060 */ 061 public void setProperty( Property property ) { 062 if (property != null) { 063 properties.put(property.getName(), property); 064 } 065 } 066 067 public void setProperties( Map<Name, Property> properties ) { 068 this.properties.clear(); 069 if (properties != null) this.properties.putAll(properties); 070 } 071 072 /** 073 * Get the property values that were added to the command 074 * 075 * @return the map of property name to values 076 */ 077 public Iterable<Property> getProperties() { 078 return this.properties.values(); 079 } 080 081 public Map<Name, Property> getPropertiesByName() { 082 return this.properties; 083 } 084 085 /** 086 * {@inheritDoc} 087 */ 088 public Path getPath() { 089 return path; 090 } 091 092 /** 093 * {@inheritDoc} 094 */ 095 public CachePolicy getCachePolicy() { 096 return cachePolicy; 097 } 098 099 /** 100 * {@inheritDoc} 101 */ 102 public DateTime getTimeLoaded() { 103 return timeLoaded; 104 } 105 106 /** 107 * @param timeLoaded Sets timeLoaded to the specified value. 108 */ 109 public void setTimeLoaded( DateTime timeLoaded ) { 110 this.timeLoaded = timeLoaded; 111 } 112 113 /** 114 * {@inheritDoc} 115 */ 116 public void setCachePolicy( CachePolicy cachePolicy ) { 117 this.cachePolicy = cachePolicy; 118 } 119 120 /** 121 * {@inheritDoc} 122 * 123 * @see java.lang.Object#toString() 124 */ 125 @Override 126 public String toString() { 127 StringBuilder sb = new StringBuilder(); 128 sb.append(this.getClass().getSimpleName()); 129 sb.append(" at "); 130 sb.append(this.getPath()); 131 boolean firstProperty = true; 132 for (Property property : this.getProperties()) { 133 if (property.isEmpty()) continue; 134 if (firstProperty) { 135 sb.append(" { "); 136 firstProperty = false; 137 } else { 138 sb.append("; "); 139 } 140 sb.append(property.getName()); 141 sb.append("="); 142 if (property.isSingle()) { 143 sb.append(StringUtil.readableString(property.getValues().next())); 144 } else { 145 sb.append(StringUtil.readableString(property.getValuesAsArray())); 146 } 147 } 148 if (!firstProperty) { 149 sb.append(" }"); 150 } 151 return sb.toString(); 152 } 153 }