001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache license, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the license for the specific language governing permissions and
015 * limitations under the license.
016 */
017 package org.apache.logging.log4j.core.impl;
018
019 import java.io.Serializable;
020
021 /**
022 * Class and package data used with a {@link StackTraceElement} in a {@link ExtendedStackTraceElement}.
023 */
024 public final class ExtendedClassInfo implements Serializable {
025
026 private static final long serialVersionUID = 1L;
027
028 private final boolean exact;
029
030 private final String location;
031
032 private final String version;
033
034 /**
035 * Constructs a new instance.
036 *
037 * @param exact
038 * @param location
039 * @param version
040 */
041 public ExtendedClassInfo(final boolean exact, final String location, final String version) {
042 super();
043 this.exact = exact;
044 this.location = location;
045 this.version = version;
046 }
047
048 @Override
049 public boolean equals(final Object obj) {
050 if (this == obj) {
051 return true;
052 }
053 if (obj == null) {
054 return false;
055 }
056 if (!(obj instanceof ExtendedClassInfo)) {
057 return false;
058 }
059 final ExtendedClassInfo other = (ExtendedClassInfo) obj;
060 if (this.exact != other.exact) {
061 return false;
062 }
063 if (this.location == null) {
064 if (other.location != null) {
065 return false;
066 }
067 } else if (!this.location.equals(other.location)) {
068 return false;
069 }
070 if (this.version == null) {
071 if (other.version != null) {
072 return false;
073 }
074 } else if (!this.version.equals(other.version)) {
075 return false;
076 }
077 return true;
078 }
079
080 public boolean getExact() {
081 return this.exact;
082 }
083
084 public String getLocation() {
085 return this.location;
086 }
087
088 public String getVersion() {
089 return this.version;
090 }
091
092 @Override
093 public int hashCode() {
094 final int prime = 31;
095 int result = 1;
096 result = prime * result + (this.exact ? 1231 : 1237);
097 result = prime * result + ((this.location == null) ? 0 : this.location.hashCode());
098 result = prime * result + ((this.version == null) ? 0 : this.version.hashCode());
099 return result;
100 }
101
102 @Override
103 public String toString() {
104 final StringBuilder sb = new StringBuilder();
105 if (!this.exact) {
106 sb.append('~');
107 }
108 sb.append('[');
109 sb.append(this.location);
110 sb.append(':');
111 sb.append(this.version);
112 sb.append(']');
113 return sb.toString();
114 }
115
116 }