blob: d9c64ba910691b656124e0a9f6d6732ec139da93 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009, 2016 xored software, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.core.internal.environment;
import java.net.URI;
import org.eclipse.core.runtime.IPath;
import org.eclipse.dltk.core.environment.IEnvironment;
import org.eclipse.dltk.core.environment.IFileHandle;
/**
* @since 2.0
*/
public abstract class LazyEnvironment implements IEnvironment {
private static final boolean DEBUG = false;
private final String environmentId;
private IEnvironment environment;
public LazyEnvironment(String environmentId) {
this.environmentId = environmentId;
if (DEBUG)
System.out.println(getClass().getName() + " - created for " //$NON-NLS-1$
+ environmentId);
}
private void initialize() {
if (environment == null) {
environment = resolveEnvironment(environmentId);
if (DEBUG)
if (environment != null)
System.out
.println(getClass().getName()
+ " - resolved " + environmentId + " to " + environment.getClass().getSimpleName()); //$NON-NLS-1$ //$NON-NLS-2$
}
}
protected abstract IEnvironment resolveEnvironment(String envId);
@Override
public boolean connect() {
initialize();
return environment != null && environment.connect();
}
@Override
public String convertPathToString(IPath path) {
initialize();
return environment != null ? environment.convertPathToString(path)
: path.toString();
}
@Override
public String getCanonicalPath(IPath path) {
initialize();
return environment != null ? environment.getCanonicalPath(path) : path
.toString();
}
@Override
public IFileHandle getFile(IPath path) {
return new LazyFileHandle(environmentId, path);
}
@Override
public IFileHandle getFile(URI locationURI) {
initialize();
return environment != null ? environment.getFile(locationURI) : null;
}
@Override
public String getId() {
return environmentId;
}
@Override
public String getName() {
initialize();
return environment != null ? environment.getName() : generateName();
}
private String generateName() {
return getClass().getSimpleName() + '[' + environmentId + ']';
}
@Override
public String getPathsSeparator() {
initialize();
return environment != null ? environment.getPathsSeparator() : ":"; //$NON-NLS-1$
}
@Override
public char getPathsSeparatorChar() {
initialize();
return environment != null ? environment.getPathsSeparatorChar() : ':';
}
@Override
public String getSeparator() {
initialize();
return environment != null ? environment.getSeparator() : "/"; //$NON-NLS-1$
}
@Override
public char getSeparatorChar() {
initialize();
return environment != null ? environment.getSeparatorChar() : '/';
}
@Override
public URI getURI(IPath location) {
initialize();
return environment != null ? environment.getURI(location) : null;
}
@Override
public boolean isConnected() {
initialize();
return environment != null ? environment.isConnected() : false;
}
@Override
public boolean isLocal() {
initialize();
return environment != null ? environment.isLocal() : false;
}
@Override
public <T> T getAdapter(Class<T> adapter) {
initialize();
return environment != null ? environment.getAdapter(adapter) : null;
}
@Override
public int hashCode() {
return environmentId.hashCode();
}
@Override
public boolean equals(Object obj) {
if (obj instanceof IEnvironment) {
IEnvironment other = (IEnvironment) obj;
return environmentId.equals(other.getId());
}
return false;
}
}