svn commit: r16123 - trunk/src/argouml-app/src/org/argouml: i18n notation/providers/uml

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: tfmorris
Date: 2008-11-21 16:33:04-0800
New Revision: 16123

Modified:
   trunk/src/argouml-app/src/org/argouml/i18n/misc.properties
   trunk/src/argouml-app/src/org/argouml/notation/providers/uml/NotationUtilityUml.java

Log:
Reduce dependency on project settings.  Add some I18N (more needed)

Modified: trunk/src/argouml-app/src/org/argouml/i18n/misc.properties
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/i18n/misc.properties?view=diff&rev=16123&p1=trunk/src/argouml-app/src/org/argouml/i18n/misc.properties&p2=trunk/src/argouml-app/src/org/argouml/i18n/misc.properties&r1=16122&r2=16123
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/i18n/misc.properties	(original)
+++ trunk/src/argouml-app/src/org/argouml/i18n/misc.properties	2008-11-21 16:33:04-0800
@@ -188,6 +188,10 @@
 misc.state.outgoing-transitions = State->Outgoing Transitions
 misc.state.substates = State->Substates
 misc.states-of-class = States of Class
+# {0} is the existing string, {1} is the new stereotype
+misc.stereo.concatenate = {0}, {1}
+misc.stereo.guillemets.true = \u00ab{0}\u00bb
+misc.stereo.guillemets.false = <<{0}>>
 misc.stimulus.action = Stimulus->Action
 misc.style = Style
 misc.summary.association = Summary->Association

Modified: trunk/src/argouml-app/src/org/argouml/notation/providers/uml/NotationUtilityUml.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/notation/providers/uml/NotationUtilityUml.java?view=diff&rev=16123&p1=trunk/src/argouml-app/src/org/argouml/notation/providers/uml/NotationUtilityUml.java&p2=trunk/src/argouml-app/src/org/argouml/notation/providers/uml/NotationUtilityUml.java&r1=16122&r2=16123
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/notation/providers/uml/NotationUtilityUml.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/notation/providers/uml/NotationUtilityUml.java	2008-11-21 16:33:04-0800
@@ -405,9 +405,13 @@
     /**
      * Returns a visibility String either for a MVisibilityKind (according to
      * the definition in NotationProvider2), but also for a model element.
-     *
+     * 
      * @param o a modelelement or a visibilitykind
-     * @return a string, guaranteed not null
+     * @return a string.  May be the empty string, but guaranteed not to be null
+     * @deprecated for 0.27.2 by tfmorris. Use
+     *             {@link #generateVisibility2(Object)} and only invoke when
+     *             a visibility is actually needed (instead of depending on
+     *             project settings).
      */
     public static String generateVisibility(Object o) {
         if (o == null) {
@@ -415,7 +419,22 @@
         }
         Project p = ProjectManager.getManager().getCurrentProject();
         ProjectSettings ps = p.getProjectSettings();
-        if (!ps.getShowVisibilityValue()) {
+        if (ps.getShowVisibilityValue()) {
+            return generateVisibility2(o);
+        } else {
+            return "";
+        }
+    }
+    
+    /**
+     * Returns a visibility String either for a VisibilityKind or a model
+     * element.
+     * 
+     * @param o a modelelement or a visibilitykind
+     * @return a string. May be the empty string, but guaranteed not to be null
+     */
+    public static String generateVisibility2(Object o) {
+        if (o == null) {
             return "";
         }
         if (Model.getFacade().isAModelElement(o)) {
@@ -639,15 +658,17 @@
             }
 
             if (value != null) {
+                // TODO: Find a better default language
+                // TODO: We should know the notation language, since it is us
                 Project project =
                     ProjectManager.getManager().getCurrentProject();
                 ProjectSettings ps = project.getProjectSettings();
+                String notationLanguage = ps.getNotationLanguage();
 
                 Object initExpr =
                     Model.getDataTypesFactory()
                         .createExpression(
-                                // TODO: Find a better default language
-                                ps.getNotationLanguage(),
+                                notationLanguage,
                                 value.toString().trim());
                 Model.getCoreHelper().setDefaultValue(p, initExpr);
             }
@@ -915,7 +936,7 @@
      *                 or a collection of stereotypes
      *                 or a modelelement of which the stereotypes are retrieved
      * @param args arguments that may determine the notation
-     * The values of "leftGuillemot" and "rightGuillemot" influence the outcome.
+     * The value of "useGuillemets" influences the outcome.
      * @return a string representing the given stereotype(s)
      */
     public static String generateStereotype(Object st, Map args) {
@@ -968,24 +989,107 @@
         if (name == null || name.length() == 0) {
             return "";
         }
+        Boolean useGuillemets = null;
         if (args != null) {
-            if (args.get("leftGuillemot") != null 
-                    && args.get("rightGuillemot") != null) {
-                return args.get("leftGuillemot") + name 
-                    + args.get("rightGuillemot");
+            useGuillemets = (Boolean) args.get("useGuillemets");
+            if (useGuillemets == null) {
+                // TODO: Temporary code for backward compatibility
+                String left = (String) args.get("leftGuillemot");
+                if (left != null) {
+                    useGuillemets = left.equals("\u00ab");
+                }
             }
         }
-        return "<<" + name + ">>";
+        if (useGuillemets == null) {
+            // Default is false for historical compatibility only
+            useGuillemets = false;
+        }
+        return formatStereotype(name, useGuillemets);
     }
 
     /**
+     * Generate the text for one or more stereotype(s).
+     * 
+     * @param st One of:
+     *            <ul>
+     *            <li>a stereotype UML object</li>
+     *            <li>a string</li>
+     *            <li>a collection of stereotypes</li>
+     *            <li>a modelelement of which the stereotypes are retrieved</li>
+     *            </ul>
+     * @param useGuillemets true if Unicode double angle bracket quote
+     *            characters should be used.
+     * @return fully formatted string with list of stereotypes separated by
+     *         commas and surround in brackets
+     */
+    public static String generateStereotype(Object st, boolean useGuillemets) {
+        if (st == null) {
+            return "";
+        }
+
+        if (st instanceof String) {
+            return formatStereotype((String) st, useGuillemets);
+        }
+        if (Model.getFacade().isAStereotype(st)) {
+            return formatStereotype(Model.getFacade().getName(st),
+                    useGuillemets);
+        }
+
+        if (Model.getFacade().isAModelElement(st)) {
+            st = Model.getFacade().getStereotypes(st);
+        }
+        
+        if (st instanceof Collection) {
+            String result = null;
+            boolean found = false;
+            for (Object stereotype : (Collection) st) {
+                String name =  Model.getFacade().getName(stereotype);
+                if (!found) {
+                    result = name;
+                    found = true;
+                } else {
+                    // Allow concatenation order and separator to be localized
+                    result = Translator.localize("misc.stereo.concatenate",
+                            new Object[] {result, name});
+                }
+            }
+            if (found) {
+                return formatStereotype(result, useGuillemets);
+            }
+        }
+        return "";
+    }
+    
+    /**
+     * Create a string representation of a stereotype, keyword or comma separate
+     * list of names. This method just wraps the string in <<angle brackets>> or
+     * guillemets (double angle bracket characters) depending on the setting
+     * of the flag <code>useGuillemets</code>.
+     * 
+     * @param name the name of the stereotype
+     * @param useGuillemets true if Unicode double angle bracket quote
+     *            characters should be used.
+     * @return the string representation
+     */
+    public static String formatStereotype(String name, boolean useGuillemets) {
+        if (name == null || name.length() == 0) {
+            return "";
+        }
+
+        String key = "misc.stereo.guillemets."
+                + Boolean.toString(useGuillemets);
+        return Translator.localize(key, new Object[] {name});
+    }
+    
+    /**
      * @param st a stereotype UML object
      *                 or a string
      *                 or a collection of stereotypes
      *                 or a modelelement of which the stereotypes are retrieved
      * @return a string representing the given stereotype(s)
-     * @deprecated by mvw in V0.25.5. Use the previous method instead,
-     * with the arguments Map.
+     * @deprecated by mvw in V0.25.5. Use 
+     * {@link #generateStereotype(Object, boolean)} or 
+     * {@link #generateStereotype(Object, Map).
      * Rationale: Use the args Map instead of accessing the Project from here.
      */
     @Deprecated
@@ -1023,9 +1127,8 @@
                 }
             }
             if (!first) {
-                return ps.getLeftGuillemot()
-                    + sb.toString()
-                    + ps.getRightGuillemot();
+                return formatStereotype(sb.toString(), 
+                        ps.getDefaultDiagramSettings().isUseGuillemets());
             }
         }
         return "";
@@ -1036,7 +1139,8 @@
         if (name == null || name.length() == 0) {
             return "";
         }
-        return ps.getLeftGuillemot() + name + ps.getRightGuillemot();
+        return formatStereotype(name, 
+                ps.getDefaultDiagramSettings().isUseGuillemets());
     }
 
     /**
@@ -1096,6 +1200,7 @@
 
     private static String generateKind(Object /*Parameter etc.*/ kind) {
         StringBuffer s = new StringBuffer();
+        // TODO: I18N
         if (kind == null /* "in" is the default */
                 || kind == Model.getDirectionKind().getInParameter()) {
             s.append(/*"in"*/ ""); /* See issue 3421. */
@@ -1124,11 +1229,37 @@
 
     /**
      * Generate the text of a multiplicity.
+     * 
+     * @param element a multiplicity or an element which has a multiplicity
+     * @param showSingularMultiplicity if false return the empty string for 1..1
+     *            multiplicities.
+     * @return a string containing the formatted multiplicity,
+     * or the empty string
+     */
+    public static String generateMultiplicity(Object element, 
+            boolean showSingularMultiplicity) {
+        Object multiplicity;
+        if (!Model.getFacade().isAMultiplicity(element)) { 
+            multiplicity = element;
+        } else if (Model.getFacade().isAUMLElement(element)) {
+            multiplicity = Model.getFacade().getMultiplicity(element);
+        } else {
+            throw new IllegalArgumentException();
+        }
+        int upper = Model.getFacade().getUpper(multiplicity);
+        int lower = Model.getFacade().getLower(multiplicity);
+        if (lower != 1 || upper != 1 || showSingularMultiplicity) {
+            // TODO: I18N
+            return Model.getFacade().toString(multiplicity);
+        }
+        return "";
+    }
+    
+    /**
+     * Generate the text of a multiplicity.
      * <p>
-     * @deprecated by mvw in V0.25.5. Use the next method instead.
-     * We needed to remove the use of the Project to obtain 
-     * its settings. Instead, make use of the args Map
-     * provided by the Fig.
+     * @deprecated by mvw in V0.25.5. Use 
+     * {@link #generateMultiplicity(Object, boolean)}.
      *
      * @param m the given multiplicity
      * @return a string (guaranteed not null)
@@ -1203,6 +1334,7 @@
             while (it.hasNext()) {
                 Object arg = it.next();
                 if (!first) {
+                    // TODO: I18N
                     p.append(", ");
                 }
 
@@ -1227,6 +1359,7 @@
             return s;
         }
 
+        // TODO: I18N
         return s + " (" + p + ")";
     }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.