9e3680d82e663fdb52de954b5195e0962b8155ca
[potlatch2.git] / net / systemeD / halcyon / connection / actions / SetTagAction.as
1 package net.systemeD.halcyon.connection.actions {
2
3     import net.systemeD.halcyon.connection.*;
4
5     /** An UndoableEntityAction corresponding to the setting of a single tag and value. */
6     public class SetTagAction extends UndoableEntityAction {
7         private var oldValue:String;
8         private var key:String;
9         private var value:String;
10
11         public function SetTagAction(entity:Entity, key:String, value:String) {
12             super(entity, "Set "+key+"="+value);
13             this.key = key;
14             this.value = value.substr(0,255);
15         }
16
17         public override function doAction():uint {
18             var tags:Object = entity.getTagsHash();
19             oldValue = tags[key];
20             if ( oldValue != value || key == '' ) {
21                 if ( value == null || value == "" || key == '' )
22                     delete tags[key];
23                 else
24                     tags[key] = value;
25                 markDirty();
26                 entity.dispatchEvent(new TagEvent(Connection.TAG_CHANGED, entity, key, key, oldValue, value));
27                 return SUCCESS;
28             } else {
29                 return NO_CHANGE;
30             }
31         }
32
33         public override function undoAction():uint {
34             var tags:Object = entity.getTagsHash();
35             if ( oldValue == null || oldValue == "" )
36                 delete tags[key];
37             else
38                 tags[key] = oldValue;
39             markClean();
40             entity.dispatchEvent(new TagEvent(Connection.TAG_CHANGED, entity, key, key, value, oldValue));
41
42             return SUCCESS;
43         }
44
45         public override function mergePrevious(prev:UndoableAction):Boolean {
46             if ( !(prev is SetTagAction) )
47                 return false;
48
49             var prevSet:SetTagAction = prev as SetTagAction;
50             if ( prevSet.entity == entity && prevSet.key == key ) {
51                 oldValue = prevSet.oldValue;
52                 return true;
53             }
54             return false;
55         }
56     }
57 }
58