org.netbeans.api.templates.CreateDescriptor Maven / Gradle / Ivy
/*
* 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.api.templates;
import java.util.Collections;
import java.util.Locale;
import java.util.Map;
import org.netbeans.api.annotations.common.CheckForNull;
import org.netbeans.api.annotations.common.NonNull;
import org.openide.filesystems.FileObject;
import org.openide.util.Lookup;
/**
* Describes file creation request. The description is produced by the
* {@link FileBuilder} and is sent out to
* {@link CreateFromTemplateAttributes} and {@link CreateFromTemplateHandler}
* SPIs as the context for their work.
*
* The class is not thread-safe. Do not access the descriptor from a thread other
* than executing the {@link CreateFromTemplateHandler} callbacks.
*
* @author sdedic
*/
public final class CreateDescriptor {
/**
* Parameter to enable free file extension mode.
* By default, the extension of the newly created file will be inherited
* from the template. But if {@link FileBuilder#createFromTemplate(org.openide.filesystems.FileObject, org.openide.filesystems.FileObject, java.lang.String, java.util.Map, org.netbeans.api.templates.FileBuilder.Mode)} is called with this
* parameter set to {@link Boolean#TRUE}
* and the file name already seems to
* include an extension (*.*
), the handler should not append
* any extension from the template.
* @since org.openide.loaders 7.16
* @see Templates.SimpleTargetChooserBuilder.freeFileExtension
*/
public static final String FREE_FILE_EXTENSION = "freeFileExtension"; // NOI18N
/**
* Specifies that no formatting or indentation should be performed on the template.
* The parameter can be specified as parameter to the template (possibly through layer registration
* of the template. Value is kept for backwards compatibility, but the attribute does not apply
* just to java templates.
*
* It's responsibility of {@link CreateFromTemplateHandler} to pay attention to this value.
*/
public static final String PREFORMATTED_TEMPLATE = "org-netbeans-modules-java-preformattedSource"; // NOI18N
private final FileObject template;
private final FileObject target;
/**
* Lookup that may carry additional information for handlers or decorators.
*/
private Lookup contextLookup = Lookup.EMPTY;
/**
* The originally specified name for the new file
*/
@SuppressWarnings("PackageVisibleField")
String name;
/**
* The proposed name - either specified, or computed
*/
@SuppressWarnings("PackageVisibleField")
String proposedName;
/**
* Template parameters
*/
@SuppressWarnings("PackageVisibleField")
Map parameters;
/**
* The locale used for file creation
*/
Locale locale = Locale.getDefault();
/**
* The extension is supplied as a part of the name
*/
boolean freeExtension;
/**
* If true, the template is preformatted and no indentation should
* take place.
*/
boolean preformatted;
/* package private */
CreateDescriptor(FileObject template, FileObject target) {
this.template = template;
this.target = target;
}
/**
* @return the template file
*/
public @NonNull FileObject getTemplate() {
return template;
}
/**
* @return the target folder
*/
public @NonNull FileObject getTarget() {
return target;
}
/**
* Provides the desired name for the created file. {@code null} can be
* returned to indicate the filename should be derived automatically.
* @return name for the created file
*/
public @CheckForNull String getName() {
return name;
}
/**
* Provides a name proposed for the file. If the caller specified the name,
* the value will be the same as {@link #getName}. A handler is encouraged
* to use the proposed name if it does not require a certain naming scheme.
* @return proposed name for the created file
*/
public @NonNull String getProposedName() {
return proposedName != null ? proposedName : name;
}
/**
* Provides the desired user locale for creating the template
* @return locale
*/
public @NonNull Locale getLocale() {
return locale;
}
/**
* Provides value for the named key. Values are originally provided by
* the caller, or the template itself; values can be provided also by
* {@link CreateFromTemplateAttributes} implementors.
*
* @param value type.
* @param n key name
* @return named value or {@code null} if the key does not exist/has no value.
*/
@CheckForNull
public T getValue(String n) {
return (T)parameters.get(n);
}
/**
* Provides access to the complete parameter map.
* @return readonly string-value map.
*/
public @NonNull Map getParameters() {
return parameters == null ? Collections.emptyMap() :
Collections.unmodifiableMap(parameters);
}
/**
* Specifies whether the extension should be taken from the specified name,
* or the extension is fixed to the template's one.
*
* @return true, if the name contains already the extension.
*/
public boolean hasFreeExtension() {
return freeExtension;
}
public boolean isPreformatted() {
return preformatted;
}
void setLookup(Lookup contextLookup) {
this.contextLookup = contextLookup;
}
/**
* Lookup that may contain additional services or instructions for
* the template creation.
* @since 1.23
*/
public Lookup getLookup() {
return contextLookup;
}
}