/*
* EditingTargetSource.java
*
* Copyright (C) 2009-12 by RStudio, Inc.
*
* Unless you have received this program directly from RStudio pursuant
* to the terms of a commercial license agreement with RStudio, then
* this program is licensed to you under the terms of version 3 of the
* GNU Affero General Public License. This program is distributed WITHOUT
* ANY EXPRESS OR IMPLIED WARRANTY, INCLUDING THOSE OF NON-INFRINGEMENT,
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Please refer to the
* AGPL (http://www.gnu.org/licenses/agpl-3.0.txt) for more details.
*
*/
package org.rstudio.studio.client.workbench.views.source.editors;
import com.google.inject.Inject;
import com.google.inject.Provider;
import org.rstudio.core.client.Debug;
import org.rstudio.studio.client.common.filetypes.*;
import org.rstudio.studio.client.workbench.model.RemoteFileSystemContext;
import org.rstudio.studio.client.workbench.views.source.editors.codebrowser.CodeBrowserEditingTarget;
import org.rstudio.studio.client.workbench.views.source.editors.data.DataEditingTarget;
import org.rstudio.studio.client.workbench.views.source.editors.explorer.ObjectExplorerEditingTarget;
import org.rstudio.studio.client.workbench.views.source.editors.profiler.ProfilerEditingTarget;
import org.rstudio.studio.client.workbench.views.source.editors.text.TextEditingTarget;
import org.rstudio.studio.client.workbench.views.source.editors.urlcontent.UrlContentEditingTarget;
import org.rstudio.studio.client.workbench.views.source.model.SourceDocument;
public interface EditingTargetSource
{
EditingTarget getEditingTarget(FileType fileType);
EditingTarget getEditingTarget(SourceDocument document,
RemoteFileSystemContext fileContext,
Provider<String> defaultNameProvider);
String getDefaultNamePrefix(SourceDocument doc);
public static class Impl implements EditingTargetSource
{
@Inject
public Impl(FileTypeRegistry registry,
Provider<TextEditingTarget> pTextEditingTarget,
Provider<DataEditingTarget> pDataEditingTarget,
Provider<UrlContentEditingTarget> pUrlContentEditingTarget,
Provider<CodeBrowserEditingTarget> pCodeBrowserEditingTarget,
Provider<ProfilerEditingTarget> pProfilerEditingTarget,
Provider<ObjectExplorerEditingTarget> pObjectExplorerEditingTarget)
{
registry_ = registry;
pTextEditingTarget_ = pTextEditingTarget;
pDataEditingTarget_ = pDataEditingTarget;
pUrlContentEditingTarget_ = pUrlContentEditingTarget;
pCodeBrowserEditingTarget_ = pCodeBrowserEditingTarget;
pProfilerEditingTarget_ = pProfilerEditingTarget;
pObjectExplorerEditingTarget_ = pObjectExplorerEditingTarget;
}
public EditingTarget getEditingTarget(FileType type)
{
if (type instanceof TextFileType)
return pTextEditingTarget_.get();
else if (type instanceof DataFrameType)
return pDataEditingTarget_.get();
else if (type instanceof UrlContentType)
return pUrlContentEditingTarget_.get();
else if (type instanceof CodeBrowserType)
return pCodeBrowserEditingTarget_.get();
else if (type instanceof ProfilerType)
return pProfilerEditingTarget_.get();
else if (type instanceof ObjectExplorerFileType)
return pObjectExplorerEditingTarget_.get();
else
return null;
}
public EditingTarget getEditingTarget(final SourceDocument document,
final RemoteFileSystemContext fileContext,
final Provider<String> defaultNameProvider)
{
FileType type = getTypeFromDocument(document);
final FileType finalType = type;
EditingTarget target = getEditingTarget(type);
target.initialize(document,
fileContext,
finalType,
defaultNameProvider);
return target;
}
public String getDefaultNamePrefix(SourceDocument document)
{
FileType type = getTypeFromDocument(document);
EditingTarget target = getEditingTarget(type);
return target.getDefaultNamePrefix();
}
private FileType getTypeFromDocument(SourceDocument document)
{
FileType type = registry_.getTypeByTypeName(document.getType());
if (type == null)
{
Debug.log("Unknown document type: " + document.getType());
type = FileTypeRegistry.TEXT;
}
return type;
}
private final FileTypeRegistry registry_;
private final Provider<TextEditingTarget> pTextEditingTarget_;
private final Provider<DataEditingTarget> pDataEditingTarget_;
private final Provider<UrlContentEditingTarget> pUrlContentEditingTarget_;
private final Provider<CodeBrowserEditingTarget> pCodeBrowserEditingTarget_;
private final Provider<ProfilerEditingTarget> pProfilerEditingTarget_;
private final Provider<ObjectExplorerEditingTarget> pObjectExplorerEditingTarget_;
}
}