blob: baccb01edb93c54f20379d8fb2d4aced9eb130b7 [file] [log] [blame]
/*
* Copyright (c) 2014, 2015, 2017 Eike Stepper (Loehne, Germany) and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v2.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v20.html
*
* Contributors:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.oomph.internal.resources;
import org.eclipse.oomph.resources.backend.BackendContainer;
import org.eclipse.oomph.resources.backend.BackendException;
import org.eclipse.core.resources.IBuildConfiguration;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IProjectNature;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.PlatformObject;
import org.eclipse.core.runtime.content.IContentTypeMatcher;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Map;
/**
* @author Eike Stepper
*/
public final class ExternalProject extends ExternalContainer implements IProject
{
private final IProjectDescription description;
public ExternalProject(BackendContainer backendContainer, IProjectDescription description)
{
super(null, backendContainer);
this.description = description;
if (description instanceof Description)
{
((Description)description).setProject(this);
}
}
@Override
public IPath getFullPath()
{
return new Path(getName()).makeAbsolute();
}
@Override
public IProject getProject()
{
return this;
}
@Override
public int getType()
{
return PROJECT;
}
@Override
public String getName()
{
return description.getName();
}
public void build(int kind, String builderName, Map<String, String> args, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void build(int kind, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void build(IBuildConfiguration config, int kind, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void close(IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void create(IProjectDescription description, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void create(IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void create(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void delete(boolean deleteContent, boolean force, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public IBuildConfiguration getActiveBuildConfig() throws CoreException
{
return getBuildConfig(IBuildConfiguration.DEFAULT_CONFIG_NAME);
}
public IBuildConfiguration getBuildConfig(String configName) throws CoreException
{
IBuildConfiguration[] buildConfigs = description.getBuildConfigReferences(configName);
return buildConfigs.length == 0 ? null : buildConfigs[0];
}
public IBuildConfiguration[] getBuildConfigs() throws CoreException
{
return description.getBuildConfigReferences(IBuildConfiguration.DEFAULT_CONFIG_NAME);
}
public IBuildConfiguration[] getReferencedBuildConfigs(String configName, boolean includeMissing) throws CoreException
{
return getBuildConfigs();
}
public boolean hasBuildConfig(String configName) throws CoreException
{
return IBuildConfiguration.DEFAULT_CONFIG_NAME.equals(configName);
}
public IContentTypeMatcher getContentTypeMatcher() throws CoreException
{
// TODO
throw new UnsupportedOperationException();
}
public IProjectDescription getDescription() throws CoreException
{
return description;
}
public IFile getFile(String name)
{
return null;
}
public IFolder getFolder(String name)
{
return null;
}
public IProjectNature getNature(String natureId) throws CoreException
{
if (description.hasNature(natureId))
{
return new IProjectNature()
{
public IProject getProject()
{
return ExternalProject.this;
}
public void setProject(IProject project)
{
throw new UnsupportedOperationException();
}
public void configure() throws CoreException
{
throw new UnsupportedOperationException();
}
public void deconfigure() throws CoreException
{
throw new UnsupportedOperationException();
}
};
}
return null;
}
public IPath getWorkingLocation(String id)
{
// TODO
throw new UnsupportedOperationException();
}
public IProject[] getReferencedProjects() throws CoreException
{
return new IProject[0];
}
public IProject[] getReferencingProjects()
{
return new IProject[0];
}
public void clearCachedDynamicReferences()
{
}
public boolean hasNature(String natureId) throws CoreException
{
return description.hasNature(natureId);
}
public boolean isNatureEnabled(String natureId) throws CoreException
{
return hasNature(natureId);
}
public boolean isOpen()
{
return true;
}
public void loadSnapshot(int options, URI snapshotLocation, IProgressMonitor monitor) throws CoreException
{
// TODO
throw new UnsupportedOperationException();
}
public void saveSnapshot(int options, URI snapshotLocation, IProgressMonitor monitor) throws CoreException
{
// TODO
throw new UnsupportedOperationException();
}
public void move(IProjectDescription description, boolean force, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void open(int updateFlags, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void open(IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void setDescription(IProjectDescription description, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
public void setDescription(IProjectDescription description, int updateFlags, IProgressMonitor monitor) throws CoreException
{
throw new ReadOnlyException();
}
/**
* @author Eike Stepper
*/
public static final class Description implements IProjectDescription
{
private final BackendContainer backendContainer;
private String name;
private String comment;
private IBuildConfiguration[] buildConfigurations;
private final List<ICommand> commands = new ArrayList<ICommand>();
private final List<String> natureIDs = new ArrayList<String>();
public Description(BackendContainer backendContainer)
{
this.backendContainer = backendContainer;
}
public String getName()
{
return name;
}
public String getComment()
{
return comment;
}
public ICommand[] getBuildSpec()
{
return commands.toArray(new ICommand[commands.size()]);
}
public String[] getNatureIds()
{
return natureIDs.toArray(new String[natureIDs.size()]);
}
public boolean hasNature(String natureId)
{
return natureIDs.contains(natureId);
}
public IBuildConfiguration[] getBuildConfigReferences(String configName)
{
if (IBuildConfiguration.DEFAULT_CONFIG_NAME.equals(configName))
{
return buildConfigurations;
}
return new IBuildConfiguration[0];
}
public IProject[] getDynamicReferences()
{
return new IProject[0];
}
@Deprecated
public IPath getLocation()
{
return backendContainer.getLocation();
}
public URI getLocationURI()
{
try
{
return new URI(backendContainer.getAbsoluteURI().toString());
}
catch (URISyntaxException ex)
{
throw new BackendException(ex);
}
}
public IProject[] getReferencedProjects()
{
return new IProject[0];
}
public ICommand newCommand()
{
return new BuildCommand(null);
}
public void setActiveBuildConfig(String configName)
{
}
public void setBuildConfigs(String[] configNames)
{
}
public void setBuildConfigReferences(String configName, IBuildConfiguration[] references)
{
}
public void setBuildSpec(ICommand[] buildSpec)
{
}
public void setComment(String comment)
{
}
@Deprecated
public void setDynamicReferences(IProject[] projects)
{
}
public void setLocation(IPath location)
{
}
public void setLocationURI(URI location)
{
}
public void setName(String projectName)
{
}
public void setNatureIds(String[] natures)
{
}
public void setReferencedProjects(IProject[] projects)
{
}
public void internalSetName(String name)
{
this.name = name;
}
public void internalSetComment(String comment)
{
this.comment = comment;
}
public void internalAddCommand(String builderName)
{
commands.add(new BuildCommand(builderName));
}
public void internalAddNatureID(String natureID)
{
natureIDs.add(natureID);
}
void setProject(ExternalProject project)
{
buildConfigurations = new IBuildConfiguration[] { new BuildConfiguration(project) };
}
/**
* @author Eike Stepper
*/
private static final class BuildConfiguration extends PlatformObject implements IBuildConfiguration
{
private final ExternalProject project;
public BuildConfiguration(ExternalProject project)
{
this.project = project;
}
public IProject getProject()
{
return project;
}
public String getName()
{
return DEFAULT_CONFIG_NAME;
}
}
/**
* @author Eike Stepper
*/
private static final class BuildCommand implements ICommand
{
private final String builderName;
public BuildCommand(String builderName)
{
this.builderName = builderName;
}
public String getBuilderName()
{
return builderName;
}
public Map<String, String> getArguments()
{
return Collections.emptyMap();
}
public boolean isBuilding(int kind)
{
return false;
}
public boolean isConfigurable()
{
return false;
}
public void setArguments(Map<String, String> args)
{
}
public void setBuilderName(String builderName)
{
}
public void setBuilding(int kind, boolean value)
{
}
}
}
}