/* * * 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 flex2.compiler.common; import flex2.compiler.config.ConfigurationValue; import flex2.compiler.config.ConfigurationInfo; import java.util.Map; import java.util.HashMap; import java.util.Set; import java.util.TreeSet; import java.util.Iterator; import java.util.Date; import java.text.DateFormat; /** * This class handles metadata specific configuration options. * * @author Roger Gonzalez */ public class MetadataConfiguration { public boolean isSet() { return ((localizedTitles.size() > 0) || (localizedDescriptions.size() > 0) || (publishers.size() > 0) || (creators.size() > 0) || (contributors.size() > 0) || (langs.size() > 0) || (date != null)); } private static String f( String in ) { in = in.trim(); return ((in.indexOf('<') == -1) && (in.indexOf( '>') == -1))? in : ("<![CDATA[" + in + "]]>"); } public String toString() { if (!isSet()) { return null; } StringBuilder sb = new StringBuilder(); sb.append("<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>"); sb.append("<rdf:Description rdf:about='' xmlns:dc='http://purl.org/dc/elements/1.1'>"); sb.append("<dc:format>application/x-shockwave-flash</dc:format>"); if (localizedTitles.size() > 0) { if ((localizedTitles.size() == 1) && (localizedTitles.get("x-default") != null)) { sb.append("<dc:title>" + f(localizedTitles.get("x-default")) + "</dc:title>"); } else { sb.append("<dc:title><rdf:Alt>"); for (Iterator it = localizedTitles.entrySet().iterator(); it.hasNext();) { Map.Entry e = (Map.Entry) it.next(); sb.append("<rdf:li xml:lang='" + e.getKey() + "'>" + f((String) e.getValue()) + "</rdf:li>"); } sb.append("</rdf:Alt></dc:title>"); } } if (localizedDescriptions.size() > 0) { if ((localizedDescriptions.size() == 1) && (localizedDescriptions.get("x-default") != null)) { sb.append("<dc:description>" + f(localizedDescriptions.get("x-default")) + "</dc:description>"); } else { sb.append("<dc:description><rdf:Alt>"); for (Iterator it = localizedDescriptions.entrySet().iterator(); it.hasNext();) { Map.Entry e = (Map.Entry) it.next(); sb.append("<rdf:li xml:lang='" + (String) e.getKey() + "'>" + f((String) e.getValue()) + "</rdf:li>"); } sb.append("</rdf:Alt></dc:description>"); } } // FIXME - I suspect we need rdf:Bag for these when there are more than one? --rg for (Iterator<String> it = publishers.iterator(); it.hasNext();) { sb.append("<dc:publisher>" + f(it.next()) + "</dc:publisher>"); } for (Iterator<String> it = creators.iterator(); it.hasNext();) { sb.append("<dc:creator>" + f(it.next()) + "</dc:creator>"); } for (Iterator<String> it = contributors.iterator(); it.hasNext();) { sb.append("<dc:contributor>" + f(it.next()) + "</dc:contributor>"); } for (Iterator<String> it = langs.iterator(); it.hasNext();) { sb.append("<dc:language>" + f(it.next()) + "</dc:language>"); } if (date == null) { date = DateFormat.getDateInstance().format(new Date()); } sb.append("<dc:date>" + f(date) + "</dc:date>"); sb.append("</rdf:Description></rdf:RDF>"); return sb.toString(); } // // 'metadata.contributor' option // private Set<String> contributors = new TreeSet<String>(); public void cfgContributor( ConfigurationValue cv, String name ) { contributors.add( name ); } public static ConfigurationInfo getContributorInfo() { return new ConfigurationInfo( 1, "name" ) { public boolean isAdvanced() { return false; } public boolean allowMultiple() { return true; } }; } // // 'metadata.creator' option // private Set<String> creators = new TreeSet<String>(); public void cfgCreator( ConfigurationValue cv, String name ) { creators.add( name ); } public static ConfigurationInfo getCreatorInfo() { return new ConfigurationInfo( 1, "name" ) { public boolean isAdvanced() { return false; } public boolean allowMultiple() { return true; } }; } // // 'metadata.date' option // public String date = null; public void cfgDate( ConfigurationValue cv, String text) { date = text; } public static ConfigurationInfo getDateInfo() { return new ConfigurationInfo( 1, "text" ) { public boolean isAdvanced() { return false; } }; } // // 'metadata.description' option // private Map<String, String> localizedDescriptions = new HashMap<String, String>(); public void cfgDescription( ConfigurationValue cv, String text ) { localizedDescriptions.put( "x-default", text ); } public static ConfigurationInfo getDescriptionInfo() { return new ConfigurationInfo( 1, "text" ) { public boolean isAdvanced() { return false; } }; } // // 'metadata.language' option // public TreeSet<String> langs = new TreeSet<String>(); public void cfgLanguage( ConfigurationValue cv, String code ) { langs.add( code ); } public static ConfigurationInfo getLanguageInfo() { return new ConfigurationInfo( 1, "code" ) { public boolean isAdvanced() { return false; } public boolean allowMultiple() { return true; } }; } // // 'metadata.localized-description' option // public void cfgLocalizedDescription( ConfigurationValue cv, String text, String lang ) { localizedDescriptions.put( lang, text ); } public static ConfigurationInfo getLocalizedDescriptionInfo() { return new ConfigurationInfo( 2, new String[] {"text", "lang"} ) { public boolean isAdvanced() { return false; } public boolean allowMultiple() { return true; } }; } // // 'metadata.localized-title' option // public void cfgLocalizedTitle( ConfigurationValue cv, String title, String lang ) { localizedTitles.put( lang, title ); } public static ConfigurationInfo getLocalizedTitleInfo() { return new ConfigurationInfo( 2, new String[] {"title", "lang"} ) { public boolean isAdvanced() { return false; } public boolean allowMultiple() { return true; } }; } // // 'metadata.publisher' option // private Set<String> publishers = new TreeSet<String>(); public void cfgPublisher( ConfigurationValue cv, String name ) { publishers.add( name ); } public static ConfigurationInfo getPublisherInfo() { return new ConfigurationInfo( 1, "name" ) { public boolean isAdvanced() { return false; } public boolean allowMultiple() { return true; } }; } // // 'metadata.title' option // private Map<String, String> localizedTitles = new HashMap<String, String>(); public void cfgTitle( ConfigurationValue cv, String title ) { localizedTitles.put( "x-default", title ); } public static ConfigurationInfo getTitleInfo() { return new ConfigurationInfo( 1, "text" ) { public boolean isAdvanced() { return false; } }; } }