001: package org.columba.calendar.ui.tagging;
002:
003: import java.net.URI;
004: import java.net.URISyntaxException;
005: import java.util.Collection;
006: import java.util.Iterator;
007:
008: import org.columba.api.gui.frame.IFrameMediator;
009: import org.columba.calendar.base.api.IActivity;
010: import org.columba.calendar.resourceloader.ResourceLoader;
011: import org.columba.calendar.ui.calendar.api.ActivitySelectionChangedEvent;
012: import org.columba.calendar.ui.calendar.api.IActivitySelectionChangedListener;
013: import org.columba.calendar.ui.frame.CalendarFrameMediator;
014: import org.columba.core.association.AssociationStore;
015: import org.columba.core.association.api.IAssociation;
016: import org.columba.core.gui.tagging.TaggingMenu;
017: import org.columba.core.tagging.TagManager;
018: import org.columba.core.tagging.api.ITag;
019:
020: public class TagCalendarMenu extends TaggingMenu implements
021: IActivitySelectionChangedListener {
022:
023: final static private String SERVICE_ID = "tagging";
024:
025: private String calendarId;
026:
027: /**
028: * @param frameMediator
029: */
030: public TagCalendarMenu(IFrameMediator frameMediator) {
031: super (frameMediator, ResourceLoader.getString("tagging",
032: "calendar_tag_message"), "menu_tag_message");
033:
034: ((CalendarFrameMediator) frameMediator).getCalendarView()
035: .addSelectionChangedListener(this );
036:
037: }
038:
039: public void selectionChanged(ActivitySelectionChangedEvent object) {
040: if (object.getSelection() != null
041: && object.getSelection().length > 0) {
042: setEnabled(true);
043: removeAll();
044: createSubMenu();
045: } else
046: setEnabled(false);
047: }
048:
049: @Override
050: protected void assignTag(String tagId) {
051: IActivity activity = ((CalendarFrameMediator) getFrameMediator())
052: .getCalendarView().getSelectedActivity();
053: String calendarId = activity.getCalendarId();
054: String activityId = activity.getId();
055:
056: AssociationStore.getInstance().addAssociation(SERVICE_ID,
057: tagId, createURI(calendarId, activityId).toString());
058:
059: }
060:
061: @Override
062: protected boolean isTagged(ITag tag) {
063: IActivity activity = ((CalendarFrameMediator) getFrameMediator())
064: .getCalendarView().getSelectedActivity();
065: if (activity == null)
066: return false;
067:
068: String calendarId = activity.getCalendarId();
069: String activityId = activity.getId();
070:
071: boolean tagged = checkAssocation(calendarId, activityId, tag);
072: return tagged;
073: }
074:
075: @Override
076: protected void removeAllTags() {
077: IActivity activity = ((CalendarFrameMediator) getFrameMediator())
078: .getCalendarView().getSelectedActivity();
079: String calendarId = activity.getCalendarId();
080: String activityId = activity.getId();
081:
082: for (Iterator<ITag> iter = TagManager.getInstance()
083: .getAllTags(); iter.hasNext();) {
084: ITag tag = iter.next();
085:
086: AssociationStore.getInstance().removeAssociation(
087: SERVICE_ID, tag.getId(),
088: createURI(calendarId, activityId).toString());
089:
090: }
091: }
092:
093: @Override
094: protected void removeTag(String tagId) {
095: IActivity activity = ((CalendarFrameMediator) getFrameMediator())
096: .getCalendarView().getSelectedActivity();
097: String calendarId = activity.getCalendarId();
098: String activityId = activity.getId();
099:
100: AssociationStore.getInstance().removeAssociation(SERVICE_ID,
101: tagId, createURI(calendarId, activityId).toString());
102:
103: }
104:
105: // create URI representing the contact
106: public static URI createURI(String folderId, Object contactId) {
107: URI uri = null;
108: try {
109: uri = new URI("columba://org.columba.calendar/" + folderId
110: + "/" + contactId);
111: } catch (URISyntaxException e) {
112: e.printStackTrace();
113: }
114: return uri;
115: }
116:
117: // check if calendar item is tagged
118: private boolean checkAssocation(String folderId, String eventId,
119: ITag tag) {
120: URI uri = createURI(folderId, eventId);
121: if (AssociationStore.getInstance() == null)
122: System.out.println("ASSOCIATION STORE IS NULL!");
123: if (uri == null)
124: System.out.println("URI IS NULL!");
125:
126: Collection<IAssociation> c = AssociationStore.getInstance()
127: .getAllAssociations(uri.toString());
128:
129: for (IAssociation as : c) {
130: if (as.getServiceId().equals(SERVICE_ID)
131: && (as.getMetaDataId() != null)
132: && (as.getMetaDataId().equals(tag.getId()))) {
133: return true;
134: }
135: }
136: return false;
137: }
138:
139: }
|