001 // Copyright 2006, 2007 The Apache Software Foundation
002 //
003 // Licensed under the Apache License, Version 2.0 (the "License");
004 // you may not use this file except in compliance with the License.
005 // You may obtain a copy of the License at
006 //
007 // http://www.apache.org/licenses/LICENSE-2.0
008 //
009 // Unless required by applicable law or agreed to in writing, software
010 // distributed under the License is distributed on an "AS IS" BASIS,
011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012 // See the License for the specific language governing permissions and
013 // limitations under the License.
014
015 package org.apache.tapestry5.ioc.internal.util;
016
017 import org.apache.tapestry5.ioc.Location;
018 import org.apache.tapestry5.ioc.Resource;
019
020 import java.util.Formatter;
021
022 /**
023 * Implementation class for {@link org.apache.tapestry5.ioc.Location}.
024 */
025 public final class LocationImpl implements Location
026 {
027 private final Resource resource;
028
029 private final int line;
030
031 private final int column;
032
033 private static final int UNKNOWN = -1;
034
035 public LocationImpl(Resource resource)
036 {
037 this(resource, UNKNOWN);
038 }
039
040 public LocationImpl(Resource resource, int line)
041 {
042 this(resource, line, UNKNOWN);
043 }
044
045 public LocationImpl(Resource resource, int line, int column)
046 {
047 this.resource = resource;
048 this.line = line;
049 this.column = column;
050 }
051
052 public Resource getResource()
053 {
054 return resource;
055 }
056
057 public int getLine()
058 {
059 return line;
060 }
061
062 public int getColumn()
063 {
064 return column;
065 }
066
067 @Override
068 public String toString()
069 {
070 StringBuilder buffer = new StringBuilder(resource.toString());
071 Formatter formatter = new Formatter(buffer);
072
073 if (line != UNKNOWN) formatter.format(", line %d", line);
074
075 if (column != UNKNOWN) formatter.format(", column %d", column);
076
077 return buffer.toString();
078 }
079
080 @Override
081 public int hashCode()
082 {
083 final int PRIME = 31;
084 int result = 1;
085 result = PRIME * result + column;
086 result = PRIME * result + line;
087 result = PRIME * result + ((resource == null) ? 0 : resource.hashCode());
088 return result;
089 }
090
091 @Override
092 public boolean equals(Object obj)
093 {
094 if (this == obj) return true;
095 if (obj == null) return false;
096 if (getClass() != obj.getClass()) return false;
097 final LocationImpl other = (LocationImpl) obj;
098 if (column != other.column) return false;
099 if (line != other.line) return false;
100 if (resource == null)
101 {
102 if (other.resource != null) return false;
103 }
104 else if (!resource.equals(other.resource)) return false;
105 return true;
106 }
107
108 }