| /* |
| * |
| * 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; |
| } |
| }; |
| } |
| } |