Merge branch 'master' into snapshotserver
[potlatch2.git] / net / systemeD / potlatch2 / mapfeatures / Presence.as
1 package net.systemeD.potlatch2.mapfeatures {
2
3     import net.systemeD.halcyon.connection.*;
4
5         /** This class defines the behaviour of the "Presence" attribute in a Map Feature definition. Presence is one of "always", "onTagMatch" or "withCategory".
6         * This is used to control whether edit controls for a feature show up on an given edit page.
7         */
8         public class Presence {
9             private static var ALWAYS:Presence;
10             private static var ON_TAG_MATCH:Presence;
11             private static var WITH_CATEGORY:Presence;
12
13         /** Translates a string from the XML form (eg "onTagMatch") to a constant (ON_TAG_MATCH) */
14         public static function getPresence(presence:String):Presence {
15             if ( ALWAYS == null ) {
16                 ALWAYS = new Presence();
17                 ON_TAG_MATCH = new OnTagMatch();
18                 WITH_CATEGORY = new WithCategory();
19             }
20             if ( presence == "always" )
21                 return ALWAYS;
22             if ( presence == "onTagMatch" )
23                 return ON_TAG_MATCH;
24             if ( presence == "withCategory" )
25                 return WITH_CATEGORY;
26             return ON_TAG_MATCH;
27         }
28
29         /** Determines whether a given edit control (editor) should be used for a given entity, given a certain category page is open.
30         *
31         * If not overriden by a child class, the behaviour is "always": show the edit control on the "Basic" page, and on the appropriate category page.
32         *
33         */
34         public function isEditorPresent(editor:EditorFactory, forEntity:Entity, forCategory:String):Boolean {
35             return forCategory == null || forCategory == editor.category;
36         }
37
38     }
39
40 }
41
42     import net.systemeD.halcyon.connection.*;
43     import net.systemeD.potlatch2.mapfeatures.*;
44     /** Special behaviour for the "onTagMatch" case: only show the edit controls if the tags specified for the feature are present on the entity. */
45     class OnTagMatch extends Presence {
46         public function OnTagMatch() {}
47
48         override public function isEditorPresent(editor:EditorFactory, forEntity:Entity, forCategory:String):Boolean {
49             return (forCategory == null || forCategory == editor.category) &&
50                       editor.areTagsMatching(forEntity);
51         }
52     }
53
54     /** Special behaviour for the "withCategory" case: only show the edit controls if the tags specified for the feature are present on the entity AND
55      * if the appropriate category page is open. */
56     class WithCategory extends Presence {
57         public function WithCategory() {}
58
59         override public function isEditorPresent(editor:EditorFactory, forEntity:Entity, forCategory:String):Boolean {
60             return forCategory == editor.category &&
61                       editor.areTagsMatching(forEntity);
62         }
63     }
64