blob: 6f86fca1c9312bb422ea3299e135ca90c7529eb8 [file] [log] [blame]
/*
* 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.modules.i18n;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import org.netbeans.api.queries.VisibilityQuery;
import org.openide.loaders.DataFolder;
import org.openide.loaders.DataObject;
import org.openide.util.NbBundle;
/**
* Utilities class for I18N module.
*
* @author Peter Zavadsky
*/
public final class I18nUtil {
/** Help ID for i18n module in general. */
public static final String HELP_ID_I18N = "internation.internation"; // NOI18N
/** Help ID for I18N dialog. */
public static final String HELP_ID_AUTOINSERT = "internation.autoinsert"; // NOI18N
/** Help ID for Insert I18N dialog. */
public static final String HELP_ID_MANINSERT = "internation.maninsert"; // NOI18N
/** Help ID for I18N form property editor. You can see it in Component inspector. */
public static final String HELP_ID_FORMED = "internation.formed"; // NOI18N
/** Help ID for I18N test wizard. */
public static final String HELP_ID_TESTING = "internation.testing"; // NOI18N
/** Help ID for I18N wizard. */
public static final String HELP_ID_WIZARD = "internation.wizard"; // NOI18N
/** Help ID for I18N options. */
public static final String HELP_ID_CUSTOM = "internation.custom"; // NOI18N
/** Help ID for parameters dialog. */
public static final String HELP_ID_ADDPARAMS = "internation.addparams"; // NOI18N
/** Help ID for replacing format. */
public static final String HELP_ID_REPLFORMAT = "internation.replformat"; // NOI18N
/** Help ID for Locale execution. */
public static final String HELP_ID_RUNLOCALE = "internation.runlocale"; // NOI18N
/** Help ID for property editor */
public static final String PE_REPLACE_CODE_HELP_ID = "i18n.pe.replacestring"; // NOI18N
/** Help ID for property editor */
public static final String PE_I18N_REGEXP_HELP_ID = "i18n.pe.i18nregexp"; // NOI18N
/** Help ID for property editor */
public static final String PE_BUNDLE_CODE_HELP_ID = "i18n.pe.bundlestring"; // NOI18N
/** Help ID for property editor */
public static final String PE_TEST_REGEXP_HELP_ID = "i18n.pe.testregexp"; // NOI18N
/** Help ID for javaI18nString. It is a universal one for all subclasses. */
public static final String PE_I18N_STRING_HELP_ID = "i18n.pe.i18nString"; // NOI18N
private static final String DEFAULT_STANDARD_REPLACE_FORMAT = "java.util.ResourceBundle.getBundle(\"{bundleNameSlashes}\").getString(\"{key}\")"; // NOI18N
private static final String DEFAULT_NETBEANS_REPLACE_FORMAT = "org.openide.util.NbBundle.getMessage({sourceFileName}.class, \"{key}\")"; // NOI18N
/** Items for init format customizer. */
private static List<String> initFormatItems;
/** Help description for init format customizer. */
private static List<String> initHelpItems;
/** Items for replace format customizer. */
private static List<String> replaceFormatItems;
/** Help description for replace format customizer. */
private static List<String> replaceHelpItems;
/** Items for regular expression customizer. */
private static List<String> regExpItems;
/** Help description for regular expression customizer. */
private static List<String> regExpHelpItems;
/** Items for i18n regular expression customizer. */
private static List<String> i18nRegExpItems;
/** Gets <code>initFormatItems</code>. */
public static List<String> getInitFormatItems() {
if(initFormatItems == null) {
initFormatItems = new ArrayList<String>(2);
initFormatItems.add("java.util.ResourceBundle.getBundle(\"{bundleNameSlashes}\")"); // NOI18N
initFormatItems.add("org.openide.util.NbBundle.getBundle({sourceFileName}.class)"); // NOI18N
}
return initFormatItems;
}
/** Gets <code>InitHelpFormats</code>. */
public static List<String> getInitHelpItems() {
if(initHelpItems == null) {
ResourceBundle bundle = getBundle();
initHelpItems = new ArrayList<String>(3);
initHelpItems.add(bundle.getString("TXT_PackageNameSlashes")); // NOI18N
initHelpItems.add(bundle.getString("TXT_PackageNameDots")); // NOI18N
initHelpItems.add(bundle.getString("TXT_SourceDataObjectName")); // NOI18N
}
return initHelpItems;
}
/** Gets <code>replaceFormatItems</code>. */
public static List<String> getReplaceFormatItems() {
if(replaceFormatItems == null) {
replaceFormatItems = new ArrayList<String>(7);
replaceFormatItems.add("{identifier}.getString(\"{key}\")"); // NOI18N
replaceFormatItems.add("Utilities.getString(\"{key}\")"); // NOI18N
replaceFormatItems.add(DEFAULT_STANDARD_REPLACE_FORMAT);
replaceFormatItems.add("org.openide.util.NbBundle.getBundle({sourceFileName}.class).getString(\"{key}\")"); // NOI18N
replaceFormatItems.add("java.text.MessageFormat.format(java.util.ResourceBundle.getBundle(\"{bundleNameSlashes}\").getString(\"{key}\"), {arguments})"); // NOI18N
replaceFormatItems.add(DEFAULT_NETBEANS_REPLACE_FORMAT);
replaceFormatItems.add("org.openide.util.NbBundle.getMessage({sourceFileName}.class, \"{key}\", {arguments})"); // NOI18N
}
return replaceFormatItems;
}
/** Gets default replace format - based on whether the project type is
* a NB module project or not. (Module projects use NbBundle preferentially.)
*/
public static String getDefaultReplaceFormat(boolean nbProject) {
return nbProject ? DEFAULT_NETBEANS_REPLACE_FORMAT : DEFAULT_STANDARD_REPLACE_FORMAT;
}
/** Gets <code>replaceHeplItems</code>.*/
public static List<String> getReplaceHelpItems() {
if(replaceHelpItems == null) {
ResourceBundle bundle = getBundle();
replaceHelpItems = new ArrayList<String>(6);
replaceHelpItems.add(bundle.getString("TXT_FieldIdentifier")); // NOI18N
replaceHelpItems.add(bundle.getString("TXT_KeyHelp")); // NOI18N
replaceHelpItems.add(bundle.getString("TXT_PackageNameSlashes")); // NOI18N
replaceHelpItems.add(bundle.getString("TXT_PackageNameDots")); // NOI18N
replaceHelpItems.add(bundle.getString("TXT_SourceDataObjectName")); // NOI18N
replaceHelpItems.add(bundle.getString("TXT_Arguments")); // NOI18N
}
return replaceHelpItems;
}
/** Gets <code>regExpItems</code>.
* [:alnum:]=any character of [:digit:] or [:alpha:] class
* [:alpha:]=any letter.
* [:blank:]=space or tab.
* [:cntrl:]=any character with octal codes 000 through 037, or DEL (octal code 177).
* [:digit:]=any digit.
* [:graph:]=any character that is not a [:alnum:] or [:punct:] class.
* [:lower:]=any lower case letter.
* [:print:]=any character from the [:space:] class, and any character that is not in the [:graph:] class.
* [:punct:]=any one of ! \" # $ % & ' ( ) * + , - . / : ; < = > ? @ [ \\ ] ^ _ ` { | } ~
* [:space:]=any character of CR FF HT NL VT SPACE.
* [:upper:]=any upper case letter.
* [:xdigit:]=any hexa digit character.
*/
public static List<String> getRegExpItems() {
if(regExpItems == null) {
regExpItems = new ArrayList<String>(4);
//XXX Only first array item taken into account when checking, rest are not used
regExpItems.add("(getString|getBundle)[:space:]*\\([:space:]*{hardString}|//[:space:]*NOI18|getMessage[:space:]*\\(([:alnum:]|[:punct:]|[:space:])*,[:space:]*{hardString}"); // NOI18N
regExpItems.add("(getString|getBundle)[:space:]*\\([:space:]*{hardString}"); // NOI18N
regExpItems.add("//[:space:]*NOI18N"); // NOI18N
regExpItems.add("(getString|getBundle)[:space:]*\\([:space:]*|getMessage[:space:]*\\(([:alnum:]|[:punct:]|[:space:])*,[:space:]*{hardString}|//[:space:]*NOI18N"); // NOI18N
}
return regExpItems;
}
/** Gets <code>i18nRegExpItems</code>. */
public static List<String> getI18nRegExpItems() {
if(i18nRegExpItems == null) {
i18nRegExpItems = new ArrayList<String>(2);
i18nRegExpItems.add("getString[:space:]*\\([:space:]*{hardString}"); // NOI18N
i18nRegExpItems.add("(getString[:space:]*\\([:space:]*|getMessage[:space:]*\\(([:alnum:]|[:punct:]|[:space:])*,[:space:]*){hardString}"); // NOI18N
}
return i18nRegExpItems;
}
/**
* Indicates if folder or its subfolders contains data object
* that is supported by any internationalization factory.
*/
public static boolean containsAcceptedDataObject(DataFolder folder) {
DataObject[] children = folder.getChildren();
DataObject[] folders = new DataObject[children.length];
int i, foldersCount = 0;
for (DataObject child : children) {
if (child instanceof DataFolder) {
folders[foldersCount++] = child;
} else if (FactoryRegistry.hasFactory(child.getClass())) {
return true;
}
}
for (i = 0; i < foldersCount; i++) {
if (containsAcceptedDataObject((DataFolder) children[i])) {
return true;
}
}
return false;
}
/**
* Recursivelly get all accepted data objects starting from given folder.
*/
public static List<DataObject> getAcceptedDataObjects(DataObject.Container folder) {
List<DataObject> accepted = new ArrayList<DataObject>();
final VisibilityQuery visQuery = VisibilityQuery.getDefault();
DataObject[] children = folder.getChildren();
for (DataObject child : children) {
if (!visQuery.isVisible(child.getPrimaryFile())) {
continue;
}
if(child instanceof DataObject.Container) {
accepted.addAll(getAcceptedDataObjects((DataObject.Container)child));
} else {
if(FactoryRegistry.hasFactory(child.getClass()))
accepted.add(child);
}
}
return accepted;
}
/** Gets resource bundle for i18n module. */
public static ResourceBundle getBundle() {
return NbBundle.getBundle(I18nUtil.class);
}
/** Gets i18n options. */
public static I18nOptions getOptions() {
return I18nOptions.getDefault();
}
}