/*
* Copyright 2013-2015 Grzegorz Ligas <ligasgr@gmail.com> and other contributors
* (see the CONTRIBUTORS file).
*
* Licensed 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.intellij.xquery.actions;
import com.intellij.ide.fileTemplates.DefaultCreateFromTemplateHandler;
import com.intellij.ide.fileTemplates.FileTemplate;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx;
import com.intellij.openapi.project.Project;
import com.intellij.psi.PsiDirectory;
import com.intellij.psi.PsiElement;
import com.intellij.util.IncorrectOperationException;
import org.intellij.xquery.XQueryFileType;
import org.intellij.xquery.settings.XQuerySettings;
import java.util.Map;
import static org.intellij.xquery.actions.XQueryFileTemplates.LIBRARY_MODULE;
import static org.intellij.xquery.actions.XQueryFileTemplates.MAIN_MODULE;
public class XQueryCreateFromTemplateHandler extends DefaultCreateFromTemplateHandler {
public static final String NAME_WITHOUT_EXTENSION = "NAME_WITHOUT_EXTENSION";
private Project project;
@Override
public PsiElement createFromTemplate(Project project, PsiDirectory directory, String fileName, FileTemplate template, String templateText, Map<String, Object> props) throws IncorrectOperationException {
this.project = project;
return super.createFromTemplate(project, directory, fileName, template, templateText, props);
}
@Override
public boolean handlesTemplate(FileTemplate template) {
FileType fileType = FileTypeManagerEx.getInstanceEx().getFileTypeByExtension(template.getExtension());
return fileType.equals(XQueryFileType.INSTANCE);
}
@Override
public void prepareProperties(Map<String, Object> props) {
String name = (String) props.get(FileTemplate.ATTRIBUTE_NAME);
if (name != null) {
String nameWithoutExtension = name.indexOf(".") > 0 ? name.substring(0, name.lastIndexOf(".")) : name;
props.put(NAME_WITHOUT_EXTENSION, nameWithoutExtension);
}
}
@Override
protected String checkAppendExtension(String fileName, FileTemplate template) {
if (hasExtension(fileName)) {
return fileName;
}
XQuerySettings settings = XQuerySettings.getInstance(project);
String extension = getExtension(template, settings);
return fileName + "." + extension;
}
private boolean hasExtension(String fileName) {
return fileName.indexOf('.') > 0;
}
private String getExtension(FileTemplate template, XQuerySettings settings) {
String extension = template.getExtension();
if (MAIN_MODULE.equals(template.getName()) && settings.getDefaultMainModuleExtension() != null) {
extension = settings.getDefaultMainModuleExtension();
} else if (LIBRARY_MODULE.equals(template.getName()) && settings.getDefaultLibraryModuleExtension() != null) {
extension = settings.getDefaultLibraryModuleExtension();
}
return extension;
}
}