You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by hb...@apache.org on 2010/07/19 23:20:28 UTC
svn commit: r965639 - in
/maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver:
ArtifactCollector.java ArtifactResolutionResult.java ArtifactResolver.java
DefaultArtifactCollector.java ResolutionNode.java
Author: hboutemy
Date: Mon Jul 19 21:20:28 2010
New Revision: 965639
URL: http://svn.apache.org/viewvc?rev=965639&view=rev
Log:
use more Java 5 generics
Modified:
maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java?rev=965639&r1=965638&r2=965639&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactCollector.java Mon Jul 19 21:20:28 2010
@@ -37,13 +37,15 @@ import java.util.Set;
*/
public interface ArtifactCollector
{
- ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, ArtifactRepository localRepository,
- List remoteRepositories, ArtifactMetadataSource source, ArtifactFilter filter,
- List listeners )
+ ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
throws ArtifactResolutionException;
- ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, Map managedVersions,
- ArtifactRepository localRepository, List remoteRepositories,
- ArtifactMetadataSource source, ArtifactFilter filter, List listeners )
+ ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact, Map managedVersions,
+ ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
throws ArtifactResolutionException;
}
Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java?rev=965639&r1=965638&r2=965639&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolutionResult.java Mon Jul 19 21:20:28 2010
@@ -19,34 +19,34 @@ package org.apache.maven.artifact.resolv
* under the License.
*/
-import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
+import org.apache.maven.artifact.Artifact;
+
/**
* @author <a href="mailto:jason@maven.org">Jason van Zyl</a>
* @version $Id$
*/
public class ArtifactResolutionResult
{
- private Set resolutionNodes;
+ private Set<ResolutionNode> resolutionNodes;
// calculated.
- private Set artifacts;
+ private Set<Artifact> artifacts;
public ArtifactResolutionResult()
{
}
- public Set getArtifacts()
+ public Set<Artifact> getArtifacts()
{
if ( artifacts == null )
{
- artifacts = new LinkedHashSet();
+ artifacts = new LinkedHashSet<Artifact>();
- for ( Iterator it = resolutionNodes.iterator(); it.hasNext(); )
+ for ( ResolutionNode node : resolutionNodes )
{
- ResolutionNode node = (ResolutionNode) it.next();
artifacts.add( node.getArtifact() );
}
}
@@ -54,12 +54,12 @@ public class ArtifactResolutionResult
return artifacts;
}
- public Set getArtifactResolutionNodes()
+ public Set<ResolutionNode> getArtifactResolutionNodes()
{
return resolutionNodes;
}
- public void setArtifactResolutionNodes( Set resolutionNodes )
+ public void setArtifactResolutionNodes( Set<ResolutionNode> resolutionNodes )
{
this.resolutionNodes = resolutionNodes;
Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java?rev=965639&r1=965638&r2=965639&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ArtifactResolver.java Mon Jul 19 21:20:28 2010
@@ -29,9 +29,9 @@ import java.util.Map;
import java.util.Set;
/**
- * I want to use it for hidding the fact that sometime artifact must be
+ * I want to use it for hiding the fact that sometime artifact must be
* downloaded. I am just asking LocalRepository for given artifact and I don't
- * care if it is alredy there or how it will get there.
+ * care if it is already there or how it will get there.
*
* @author <a href="michal.maczka@dimatics.com">Michal Maczka </a>
* @version $Id$
@@ -41,58 +41,58 @@ public interface ArtifactResolver
{
String ROLE = ArtifactResolver.class.getName();
- void resolve( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
+ void resolve( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository )
throws ArtifactResolutionException, ArtifactNotFoundException;
- ArtifactResolutionResult resolveTransitively( Set artifacts,
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts,
Artifact originatingArtifact,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactRepository localRepository,
ArtifactMetadataSource source )
throws ArtifactResolutionException, ArtifactNotFoundException;
- ArtifactResolutionResult resolveTransitively( Set artifacts,
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts,
Artifact originatingArtifact,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactRepository localRepository,
ArtifactMetadataSource source,
List listeners )
throws ArtifactResolutionException, ArtifactNotFoundException;
- ArtifactResolutionResult resolveTransitively( Set artifacts,
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts,
Artifact originatingArtifact,
ArtifactRepository localRepository,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataSource source,
ArtifactFilter filter )
throws ArtifactResolutionException, ArtifactNotFoundException;
- ArtifactResolutionResult resolveTransitively( Set artifacts,
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts,
Artifact originatingArtifact,
Map managedVersions,
ArtifactRepository localRepository,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataSource source )
throws ArtifactResolutionException, ArtifactNotFoundException;
- ArtifactResolutionResult resolveTransitively( Set artifacts,
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts,
Artifact originatingArtifact,
Map managedVersions,
ArtifactRepository localRepository,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataSource source, ArtifactFilter filter )
throws ArtifactResolutionException, ArtifactNotFoundException;
- ArtifactResolutionResult resolveTransitively( Set artifacts,
+ ArtifactResolutionResult resolveTransitively( Set<Artifact> artifacts,
Artifact originatingArtifact,
Map managedVersions,
ArtifactRepository localRepository,
- List remoteRepositories,
+ List<ArtifactRepository> remoteRepositories,
ArtifactMetadataSource source,
ArtifactFilter filter,
List listeners )
throws ArtifactResolutionException, ArtifactNotFoundException;
- void resolveAlways( Artifact artifact, List remoteRepositories, ArtifactRepository localRepository )
+ void resolveAlways( Artifact artifact, List<ArtifactRepository> remoteRepositories, ArtifactRepository localRepository )
throws ArtifactResolutionException, ArtifactNotFoundException;
}
\ No newline at end of file
Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java?rev=965639&r1=965638&r2=965639&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/DefaultArtifactCollector.java Mon Jul 19 21:20:28 2010
@@ -49,21 +49,25 @@ import java.util.Set;
public class DefaultArtifactCollector
implements ArtifactCollector
{
- public ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact,
- ArtifactRepository localRepository, List remoteRepositories,
- ArtifactMetadataSource source, ArtifactFilter filter, List listeners )
+ public ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
throws ArtifactResolutionException
{
return collect( artifacts, originatingArtifact, Collections.EMPTY_MAP, localRepository, remoteRepositories,
source, filter, listeners );
}
- public ArtifactResolutionResult collect( Set artifacts, Artifact originatingArtifact, Map managedVersions,
- ArtifactRepository localRepository, List remoteRepositories,
- ArtifactMetadataSource source, ArtifactFilter filter, List listeners )
+ public ArtifactResolutionResult collect( Set<Artifact> artifacts, Artifact originatingArtifact,
+ Map managedVersions, ArtifactRepository localRepository,
+ List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter,
+ List<ResolutionListener> listeners )
throws ArtifactResolutionException
{
- Map resolvedArtifacts = new LinkedHashMap();
+ Map<Object, List<ResolutionNode>> resolvedArtifacts = new LinkedHashMap<Object, List<ResolutionNode>>();
ResolutionNode root = new ResolutionNode( originatingArtifact, remoteRepositories );
@@ -71,17 +75,15 @@ public class DefaultArtifactCollector
ManagedVersionMap versionMap = getManagedVersionsMap( originatingArtifact, managedVersions );
- recurse( originatingArtifact, root, resolvedArtifacts, versionMap, localRepository, remoteRepositories, source, filter,
- listeners );
+ recurse( originatingArtifact, root, resolvedArtifacts, versionMap, localRepository, remoteRepositories, source,
+ filter, listeners );
- Set set = new LinkedHashSet();
+ Set<ResolutionNode> set = new LinkedHashSet<ResolutionNode>();
- for ( Iterator i = resolvedArtifacts.values().iterator(); i.hasNext(); )
+ for ( List<ResolutionNode> nodes : resolvedArtifacts.values() )
{
- List nodes = (List) i.next();
- for ( Iterator j = nodes.iterator(); j.hasNext(); )
+ for ( ResolutionNode node : nodes )
{
- ResolutionNode node = (ResolutionNode) j.next();
if ( !node.equals( root ) && node.isActive() )
{
Artifact artifact = node.getArtifact();
@@ -140,9 +142,10 @@ public class DefaultArtifactCollector
return versionMap;
}
- private void recurse( Artifact originatingArtifact, ResolutionNode node, Map resolvedArtifacts, ManagedVersionMap managedVersions,
- ArtifactRepository localRepository, List remoteRepositories, ArtifactMetadataSource source,
- ArtifactFilter filter, List listeners )
+ private void recurse( Artifact originatingArtifact, ResolutionNode node,
+ Map<Object, List<ResolutionNode>> resolvedArtifacts, ManagedVersionMap managedVersions,
+ ArtifactRepository localRepository, List<ArtifactRepository> remoteRepositories,
+ ArtifactMetadataSource source, ArtifactFilter filter, List<ResolutionListener> listeners )
throws CyclicDependencyException, ArtifactResolutionException, OverConstrainedVersionException
{
fireEvent( ResolutionListener.TEST_ARTIFACT, listeners, node );
@@ -156,13 +159,11 @@ public class DefaultArtifactCollector
manageArtifact( node, managedVersions, listeners );
}
- List previousNodes = (List) resolvedArtifacts.get( key );
+ List<ResolutionNode> previousNodes = resolvedArtifacts.get( key );
if ( previousNodes != null )
{
- for ( Iterator i = previousNodes.iterator(); i.hasNext(); )
+ for ( ResolutionNode previous : previousNodes )
{
- ResolutionNode previous = (ResolutionNode) i.next();
-
if ( previous.isActive() )
{
// Version mediation
@@ -198,7 +199,7 @@ public class DefaultArtifactCollector
{
// go find the version. This is a total hack. See previous comment.
- List versions = resetArtifact.getAvailableVersions();
+ List<ArtifactVersion> versions = resetArtifact.getAvailableVersions();
if ( versions == null )
{
try
@@ -271,7 +272,7 @@ public class DefaultArtifactCollector
}
else
{
- previousNodes = new ArrayList();
+ previousNodes = new ArrayList<ResolutionNode>();
resolvedArtifacts.put( key, previousNodes );
}
previousNodes.add( node );
@@ -288,9 +289,9 @@ public class DefaultArtifactCollector
Artifact parentArtifact = node.getArtifact();
- for ( Iterator i = node.getChildrenIterator(); i.hasNext(); )
+ for ( Iterator<ResolutionNode> i = node.getChildrenIterator(); i.hasNext(); )
{
- ResolutionNode child = (ResolutionNode) i.next();
+ ResolutionNode child = i.next();
// We leave in optional ones, but don't pick up its dependencies
if ( !child.isResolved() && ( !child.getArtifact().isOptional() || child.isChildOfRootNode() ) )
@@ -298,7 +299,7 @@ public class DefaultArtifactCollector
Artifact artifact = child.getArtifact();
artifact.setDependencyTrail( node.getDependencyTrail() );
- List childRemoteRepositories = child.getRemoteRepositories();
+ List<ArtifactRepository> childRemoteRepositories = child.getRemoteRepositories();
try
{
Object childKey;
@@ -349,7 +350,7 @@ public class DefaultArtifactCollector
else
{
//go find the version
- List versions = artifact.getAvailableVersions();
+ List<ArtifactVersion> versions = artifact.getAvailableVersions();
if ( versions == null )
{
versions = source.retrieveAvailableVersions( artifact, localRepository,
@@ -443,7 +444,8 @@ public class DefaultArtifactCollector
}
}
- private void manageArtifact( ResolutionNode node, ManagedVersionMap managedVersions, List listeners )
+ private void manageArtifact( ResolutionNode node, ManagedVersionMap managedVersions,
+ List<ResolutionListener> listeners )
{
Artifact artifact = (Artifact) managedVersions.get( node.getKey() );
@@ -477,7 +479,7 @@ public class DefaultArtifactCollector
* @param nearest nearest resolution node
* @param listeners
*/
- boolean checkScopeUpdate( ResolutionNode farthest, ResolutionNode nearest, List listeners )
+ boolean checkScopeUpdate( ResolutionNode farthest, ResolutionNode nearest, List<ResolutionListener> listeners )
{
boolean updateScope = false;
Artifact farthestArtifact = farthest.getArtifact();
@@ -518,23 +520,21 @@ public class DefaultArtifactCollector
return updateScope;
}
- private void fireEvent( int event, List listeners, ResolutionNode node )
+ private void fireEvent( int event, List<ResolutionListener> listeners, ResolutionNode node )
{
fireEvent( event, listeners, node, null );
}
- private void fireEvent( int event, List listeners, ResolutionNode node, Artifact replacement )
+ private void fireEvent( int event, List<ResolutionListener> listeners, ResolutionNode node, Artifact replacement )
{
fireEvent( event, listeners, node, replacement, null );
}
- private void fireEvent( int event, List listeners, ResolutionNode node, Artifact replacement,
+ private void fireEvent( int event, List<ResolutionListener> listeners, ResolutionNode node, Artifact replacement,
VersionRange newRange )
{
- for ( Iterator i = listeners.iterator(); i.hasNext(); )
+ for ( ResolutionListener listener : listeners )
{
- ResolutionListener listener = (ResolutionListener) i.next();
-
switch ( event )
{
case ResolutionListener.TEST_ARTIFACT:
Modified: maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java
URL: http://svn.apache.org/viewvc/maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java?rev=965639&r1=965638&r2=965639&view=diff
==============================================================================
--- maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java (original)
+++ maven/maven-2/branches/maven-2.2.x/maven-artifact/src/main/java/org/apache/maven/artifact/resolver/ResolutionNode.java Mon Jul 19 21:20:28 2010
@@ -20,6 +20,7 @@ package org.apache.maven.artifact.resolv
*/
import org.apache.maven.artifact.Artifact;
+import org.apache.maven.artifact.repository.ArtifactRepository;
import org.apache.maven.artifact.resolver.filter.ArtifactFilter;
import org.apache.maven.artifact.versioning.ArtifactVersion;
import org.apache.maven.artifact.versioning.OverConstrainedVersionException;
@@ -35,35 +36,35 @@ public class ResolutionNode
{
private Artifact artifact;
- private List children;
+ private List<ResolutionNode> children;
- private final List parents;
+ private final List<Object> parents;
private final int depth;
private final ResolutionNode parent;
- private final List remoteRepositories;
+ private final List<ArtifactRepository> remoteRepositories;
private boolean active = true;
- private List trail;
+ private List<Artifact> trail;
- public ResolutionNode( Artifact artifact, List remoteRepositories )
+ public ResolutionNode( Artifact artifact, List<ArtifactRepository> remoteRepositories )
{
this.artifact = artifact;
this.remoteRepositories = remoteRepositories;
depth = 0;
- parents = Collections.EMPTY_LIST;
+ parents = Collections.emptyList();
parent = null;
}
- public ResolutionNode( Artifact artifact, List remoteRepositories, ResolutionNode parent )
+ public ResolutionNode( Artifact artifact, List<ArtifactRepository> remoteRepositories, ResolutionNode parent )
{
this.artifact = artifact;
this.remoteRepositories = remoteRepositories;
depth = parent.depth + 1;
- parents = new ArrayList();
+ parents = new ArrayList<Object>();
parents.addAll( parent.parents );
parents.add( parent.getKey() );
this.parent = parent;
@@ -84,17 +85,16 @@ public class ResolutionNode
return artifact.getDependencyConflictId();
}
- public void addDependencies( Set artifacts, List remoteRepositories, ArtifactFilter filter )
+ public void addDependencies( Set<Artifact> artifacts, List<ArtifactRepository> remoteRepositories,
+ ArtifactFilter filter )
throws CyclicDependencyException, OverConstrainedVersionException
{
if ( !artifacts.isEmpty() )
{
- children = new ArrayList( artifacts.size() );
+ children = new ArrayList<ResolutionNode>( artifacts.size() );
- for ( Iterator i = artifacts.iterator(); i.hasNext(); )
+ for ( Artifact a : artifacts )
{
- Artifact a = (Artifact) i.next();
-
if ( parents.contains( a.getDependencyConflictId() ) )
{
a.setDependencyTrail( getDependencyTrail() );
@@ -107,7 +107,7 @@ public class ResolutionNode
}
else
{
- children = Collections.EMPTY_LIST;
+ children = Collections.emptyList();
}
trail = null;
}
@@ -116,26 +116,25 @@ public class ResolutionNode
* @return {@link List} < {@link String} > with artifact ids
* @throws OverConstrainedVersionException
*/
- public List getDependencyTrail()
+ public List<String> getDependencyTrail()
throws OverConstrainedVersionException
{
- List trial = getTrail();
+ List<Artifact> trial = getTrail();
- List ret = new ArrayList( trial.size() );
- for ( Iterator i = trial.iterator(); i.hasNext(); )
+ List<String> ret = new ArrayList<String>( trial.size() );
+ for ( Artifact artifact : trial )
{
- Artifact artifact = (Artifact) i.next();
ret.add( artifact.getId() );
}
return ret;
}
- private List getTrail()
+ private List<Artifact> getTrail()
throws OverConstrainedVersionException
{
if ( trail == null )
{
- List ids = new LinkedList();
+ List<Artifact> ids = new LinkedList<Artifact>();
ResolutionNode node = this;
while ( node != null )
{
@@ -175,7 +174,7 @@ public class ResolutionNode
return parent != null && parent.parent == null;
}
- public Iterator getChildrenIterator()
+ public Iterator<ResolutionNode> getChildrenIterator()
{
return children.iterator();
}
@@ -185,7 +184,7 @@ public class ResolutionNode
return depth;
}
- public List getRemoteRepositories()
+ public List<ArtifactRepository> getRemoteRepositories()
{
return remoteRepositories;
}
@@ -201,9 +200,8 @@ public class ResolutionNode
// TODO: if it was null, we really need to go find them now... or is this taken care of by the ordering?
if ( children != null )
{
- for ( Iterator i = children.iterator(); i.hasNext(); )
+ for ( ResolutionNode node : children )
{
- ResolutionNode node = (ResolutionNode) i.next();
node.enable();
}
}
@@ -214,9 +212,8 @@ public class ResolutionNode
active = false;
if ( children != null )
{
- for ( Iterator i = children.iterator(); i.hasNext(); )
+ for ( ResolutionNode node : children )
{
- ResolutionNode node = (ResolutionNode) i.next();
node.disable();
}
}
@@ -225,19 +222,17 @@ public class ResolutionNode
public boolean filterTrail( ArtifactFilter filter )
throws OverConstrainedVersionException
{
- boolean success = true;
if ( filter != null )
{
- for ( Iterator i = getTrail().iterator(); i.hasNext() && success; )
+ for ( Artifact artifact : getTrail() )
{
- Artifact artifact = (Artifact) i.next();
if ( !filter.include( artifact ) )
{
- success = false;
+ return false;
}
}
}
- return success;
+ return true;
}
public String toString()