/*
* Copyright (c) 2009, CoreMedia AG, Hamburg. All rights reserved.
*/
package net.jangaroo.properties.model;
import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.configuration.PropertiesConfigurationLayout;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
public class PropertiesClass {
private static final Pattern AS3_IDENTIFIER_PATTERN = Pattern.compile("(\\p{Alpha}|[$_])(\\p{Alnum}|[$_])*");
private ResourceBundleClass resourceBundle;
private Locale locale;
private PropertiesConfiguration properties;
private File srcFile;
public PropertiesClass(ResourceBundleClass resourceBundle, Locale locale, PropertiesConfiguration properties, File srcFile) {
this.resourceBundle = resourceBundle;
resourceBundle.addLocaleProperties(locale, this);
this.locale = locale;
this.properties = properties;
this.srcFile = srcFile;
}
public ResourceBundleClass getResourceBundle() {
return resourceBundle;
}
public Locale getLocale() {
return locale;
}
public String getComment() {
return adjustComment(properties.getLayout().getCanonicalHeaderComment(true));
}
public List<Property> getProps() {
PropertiesConfigurationLayout layout = properties.getLayout();
List<Property> props = new ArrayList<Property>();
Iterator keys = properties.getKeys();
while (keys.hasNext()) {
String key = (String)keys.next();
props.add(new Property(adjustComment(layout.getCanonicalComment(key, true)), key, isIdentifier(key), properties.getString(key)));
}
return props;
}
private String adjustComment(String canonicalComment) {
return canonicalComment == null ? null : canonicalComment.replaceAll("(^|\\n)#", "\n *");
}
private static boolean isIdentifier(String str) {
return AS3_IDENTIFIER_PATTERN.matcher(str).matches();
}
public File getSrcFile() {
return srcFile;
}
}