blob: e59c573805f044019ad9079ba8761b6e66d8dc1e [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.netbeans.modules.project.dependency;
import java.io.IOException;
import java.util.Collection;
import javax.swing.event.ChangeListener;
import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.project.Project;
import org.openide.filesystems.FileObject;
import org.openide.util.Lookup;
/**
* Results of a dependency inspection. Contains dependency graph from the {@link #getRoot}.
* The result may become invalid, as a result of project changes or dependency changes.
* The state change will be reported by {@link ChangeListener}. If the client is interested
* in an updated result, it must perform another dependency scan. Once invalid instance
* will never turn back to valid. Source mapping can be also monitored, the result will inform
* a listener added by {@link #addSourceChangeListener} that the {@link SourceLocation}s returned
* from {@link #getDeclarationRange} may have changed, e.g. as a result of a editor operation.
* <p>
* The {@link #getLookup() lookup} can be used to search for project-specific services that
* can provide further info on the artifacts or dependencies.
* @author sdedic
*/
public interface DependencyResult extends Lookup.Provider {
/**
* @return the inspected project
*/
public Project getProject();
/**
* Returns files that may declare dependencies contained in this report.
* @return project files that define dependencies.
*/
public Collection<FileObject> getDependencyFiles();
/**
* The root of the dependency tree. Its artifact should represent the project itself.
* @return project dependency root.
*/
public Dependency getRoot();
/**
* Checks if the data is still valid
* @return true, if the data is valid
*/
public boolean isValid();
/**
* Returns artifacts that may be unavailable or erroneous.
* @return problem artifacts
*/
public Collection<ArtifactSpec> getProblemArtifacts();
/**
* Registers a Listener to be notified when validity changes, e.g. as a result
* of project reload.
* @param l listener
*/
public void addChangeListener(ChangeListener l);
/**
* Unregisters a previously registered Listener.
* @param l listener
*/
public void removeChangeListener(ChangeListener l);
/**
* Registers a listener that gets notified if the source locations could change, as
* a result of e.g. text edit.
* @param l the listener
*/
public void addSourceChangeListener(ChangeListener l);
/**
* Removes a previously registered listener
* @param l the listener
*/
public void removeSourceChangeListener(ChangeListener l);
/**
* Name part of the dependency declaration.
*/
public static final String PART_NAME = "name"; // NOI18N
/**
* Group or publisher part of the dependency declaration.
*/
public static final String PART_GROUP = "group"; // NOI18N
/**
* The version part of the dependency declaration.
*/
public static final String PART_VERSON = "version"; // NOI18N
/**
* The scope part of the dependency declaration.
*/
public static final String PART_SCOPE = "scope"; // NOI18N
/**
* A special part that locates a location appropriate for the surrounding
* container. For example {@code dependencies} element in Maven or {@code dependencies}
* block in a gradle script. Use project root as the dependency
*/
public static final String PART_CONTAINER = "container"; // NOI18N
/**
* Attempts to find location where this dependency is declared.
* @param d the dependency to query
* @param part a specific part that should be located in the text.
* @return the location for the dependency or its part; {@code null} if the
* source location can not be determined.
*/
public @CheckForNull SourceLocation getDeclarationRange(@NonNull Dependency d, String part) throws IOException;
}