package org.ovirt.engine.ui.uicommonweb.models.tags; import java.util.Collections; import org.ovirt.engine.core.compat.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.vdscommands.*; import org.ovirt.engine.core.common.queries.*; import org.ovirt.engine.core.common.action.*; import org.ovirt.engine.ui.frontend.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; import org.ovirt.engine.core.common.*; import org.ovirt.engine.ui.uicommonweb.dataprovider.*; import org.ovirt.engine.ui.uicommonweb.models.common.*; import org.ovirt.engine.ui.uicompat.*; import org.ovirt.engine.core.common.businessentities.*; import org.ovirt.engine.core.common.queries.*; import org.ovirt.engine.ui.uicommonweb.*; import org.ovirt.engine.ui.uicommonweb.models.*; @SuppressWarnings("unused") public class TagListModel extends SearchableListModel { public static EventDefinition ResetRequestedEventDefinition; private Event privateResetRequestedEvent; public Event getResetRequestedEvent() { return privateResetRequestedEvent; } private void setResetRequestedEvent(Event value) { privateResetRequestedEvent = value; } private UICommand privateNewCommand; public UICommand getNewCommand() { return privateNewCommand; } private void setNewCommand(UICommand value) { privateNewCommand = value; } private UICommand privateEditCommand; public UICommand getEditCommand() { return privateEditCommand; } private void setEditCommand(UICommand value) { privateEditCommand = value; } private UICommand privateRemoveCommand; public UICommand getRemoveCommand() { return privateRemoveCommand; } private void setRemoveCommand(UICommand value) { privateRemoveCommand = value; } private UICommand privateResetCommand; public UICommand getResetCommand() { return privateResetCommand; } private void setResetCommand(UICommand value) { privateResetCommand = value; } public TagModel getSelectedItem() { return (TagModel)super.getSelectedItem(); } public void setSelectedItem(TagModel value) { super.setSelectedItem(value); } public Iterable getItems() { return items; } public void setItems(Iterable value) { if (items != value) { ItemsChanging(value, items); items = value; ItemsChanged(); getItemsChangedEvent().raise(this, EventArgs.Empty); OnPropertyChanged(new PropertyChangedEventArgs("Items")); } } private java.util.ArrayList<SelectionTreeNodeModel> selectionNodeList; public java.util.ArrayList<SelectionTreeNodeModel> getSelectionNodeList() { return selectionNodeList; } public void setSelectionNodeList(java.util.ArrayList<SelectionTreeNodeModel> value) { if (selectionNodeList != value) { selectionNodeList = value; OnPropertyChanged(new PropertyChangedEventArgs("SelectionNodeList")); } } private java.util.Map<Guid, Boolean> attachedTagsToEntities; public java.util.Map<Guid, Boolean> getAttachedTagsToEntities() { return attachedTagsToEntities; } public void setAttachedTagsToEntities(java.util.Map<Guid, Boolean> value) { if (attachedTagsToEntities != value) { attachedTagsToEntities = value; AttachedTagsToEntitiesChanged(); OnPropertyChanged(new PropertyChangedEventArgs("AttachedTagsToEntities")); } } static { ResetRequestedEventDefinition = new EventDefinition("ResetRequested", SystemTreeModel.class); } public TagListModel() { setResetRequestedEvent(new Event(ResetRequestedEventDefinition)); setNewCommand(new UICommand("New", this)); setEditCommand(new UICommand("Edit", this)); setRemoveCommand(new UICommand("Remove", this)); setResetCommand(new UICommand("Reset", this)); setIsTimerDisabled(true); getSearchCommand().Execute(); UpdateActionAvailability(); //Initialize SelectedItems property with empty collection. setSelectedItems(new java.util.ArrayList<TagModel>()); setSelectionNodeList(new java.util.ArrayList<SelectionTreeNodeModel>()); } @Override protected void SyncSearch() { super.SyncSearch(); AsyncDataProvider.GetRootTag(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { TagListModel tagListModel = (TagListModel)target; TagModel rootTag = tagListModel.TagToModel((org.ovirt.engine.core.common.businessentities.tags)returnValue); rootTag.getName().setEntity("Root"); rootTag.setType(TagModelType.Root); rootTag.setIsChangable(false); tagListModel.setItems(new java.util.ArrayList<TagModel>(java.util.Arrays.asList(new TagModel[] { rootTag }))); } })); } @Override protected void ItemsChanged() { super.ItemsChanged(); if (getSelectionNodeList().isEmpty() && getAttachedTagsToEntities() != null) { AttachedTagsToEntitiesChanged(); } } protected void AttachedTagsToEntitiesChanged() { java.util.ArrayList<TagModel> tags = (java.util.ArrayList<TagModel>)getItems(); if (tags != null) { TagModel root = tags.get(0); if (getAttachedTagsToEntities() != null) { RecursiveSetSelection(root, getAttachedTagsToEntities()); } if (getSelectionNodeList().isEmpty()) { setSelectionNodeList(new java.util.ArrayList<SelectionTreeNodeModel>(java.util.Arrays.asList(new SelectionTreeNodeModel[] {CreateTree(root)}))); } } } public void RecursiveSetSelection(TagModel tagModel, java.util.Map<Guid, Boolean> attachedEntities) { if (attachedEntities.containsKey(tagModel.getId()) && attachedEntities.get(tagModel.getId())) { tagModel.setSelection(true); } else { tagModel.setSelection(false); } if (tagModel.getChildren() != null) { for (TagModel subModel : tagModel.getChildren()) { RecursiveSetSelection(subModel, attachedEntities); } } } public SelectionTreeNodeModel CreateTree(TagModel tag) { SelectionTreeNodeModel node = new SelectionTreeNodeModel(); node.setDescription(tag.getName().getEntity().toString()); node.setIsSelectedNullable(tag.getSelection()); node.setIsChangable(tag.getIsChangable()); node.setIsSelectedNotificationPrevent(true); node.setEntity(tag); node.getPropertyChangedEvent().addListener(this); if (tag.getChildren().isEmpty()) { getSelectionNodeList().add(node); return node; } for (TagModel childTag : tag.getChildren()) { SelectionTreeNodeModel childNode = CreateTree(childTag); childNode.setParent(node); node.getChildren().add(childNode); } return node; } public TagModel CloneTagModel(TagModel tag) { java.util.ArrayList<TagModel> children = new java.util.ArrayList<TagModel>(); for (TagModel child : tag.getChildren()) { children.add(CloneTagModel(child)); } TagModel model = new TagModel(); model.setId(tag.getId()); model.setName(tag.getName()); model.setDescription(tag.getDescription()); model.setType(tag.getType()); model.setSelection(tag.getSelection()); model.setParentId(tag.getParentId()); model.setChildren(children); model.getSelectionChangedEvent().addListener(this); return model; } public TagModel TagToModel(org.ovirt.engine.core.common.businessentities.tags tag) { EntityModel tempVar = new EntityModel(); tempVar.setEntity(tag.gettag_name()); EntityModel name = tempVar; EntityModel tempVar2 = new EntityModel(); tempVar2.setEntity(tag.getdescription()); EntityModel description = tempVar2; java.util.ArrayList<TagModel> children = new java.util.ArrayList<TagModel>(); for (org.ovirt.engine.core.common.businessentities.tags a : tag.getChildren()) { children.add(TagToModel(a)); } TagModel model = new TagModel(); model.setId(tag.gettag_id()); model.setName(name); model.setDescription(description); model.setType((tag.getIsReadonly() == null ? false : tag.getIsReadonly()) ? TagModelType.ReadOnly : TagModelType.Regular); model.setSelection(false); model.setParentId(tag.getparent_id() == null ? Guid.Empty : tag.getparent_id().getValue()); model.setChildren(children); model.getSelectionChangedEvent().addListener(this); return model; } @Override public void eventRaised(Event ev, Object sender, EventArgs args) { super.eventRaised(ev, sender, args); if (ev.equals(TagModel.SelectionChangedEventDefinition)) { OnTagSelectionChanged(sender, args); } } @Override protected void EntityPropertyChanged(Object sender, PropertyChangedEventArgs e) { super.EntityPropertyChanged(sender, e); if (e.PropertyName.equals("IsSelectedNullable")) { SelectionTreeNodeModel selectionTreeNodeModel = (SelectionTreeNodeModel) sender; TagModel tagModel = (TagModel)selectionTreeNodeModel.getEntity(); tagModel.setSelection(selectionTreeNodeModel.getIsSelectedNullable()); OnTagSelectionChanged(tagModel, e); } } private void OnTagSelectionChanged(Object sender, EventArgs e) { TagModel model = (TagModel)sender; java.util.ArrayList<TagModel> list = new java.util.ArrayList<TagModel>(); if (getSelectedItems() != null) { for (Object item : getSelectedItems()) { list.add((TagModel)item); } } if ((model.getSelection() == null ? false : model.getSelection())) { list.add(model); } else { list.remove(model); } setSelectedItems(list); } @Override protected void AsyncSearch() { super.AsyncSearch(); SyncSearch(); } private void Reset() { setSelectedItems(new java.util.ArrayList<TagModel>()); if (getItems() != null) { for (Object item : getItems()) { ResetInternal((TagModel) item); } } // Async tag search will cause tree selection to be cleared // Search(); getResetRequestedEvent().raise(this, EventArgs.Empty); } private void ResetInternal(TagModel root) { root.setSelection(false); for (TagModel item : root.getChildren()) { ResetInternal(item); } } public void remove() { if (getWindow() != null) { return; } ConfirmationModel model = new ConfirmationModel(); setWindow(model); model.setTitle("Remove Tag(s)"); model.setHashName("remove_tag"); model.setMessage("Tag(s):"); java.util.ArrayList<Object> items = new java.util.ArrayList<Object>(); items.add(getSelectedItem().getName().getEntity()); model.setItems(items); model.setNote("NOTE:\n - Removing the tag will also remove all of its descendants.\n - Tag and descendants will be erased from all objects that are attached to them."); UICommand tempVar = new UICommand("OnRemove", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void OnRemove() { ConfirmationModel model = (ConfirmationModel)getWindow(); if (model.getProgress() != null) { return; } model.StartProgress(null); Frontend.RunAction(VdcActionType.RemoveTag, new TagsActionParametersBase(getSelectedItem().getId()), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { TagListModel tagListModel = (TagListModel)result.getState(); VdcReturnValueBase returnVal = result.getReturnValue(); boolean success = returnVal != null && returnVal.getSucceeded(); if (success) { tagListModel.getSearchCommand().Execute(); } tagListModel.Cancel(); tagListModel.StopProgress(); } }, this); } public void Edit() { if (getWindow() != null) { return; } TagModel model = new TagModel(); setWindow(model); model.setTitle("Edit Tag"); model.setHashName("edit_tag"); model.setIsNew(false); model.getName().setEntity(getSelectedItem().getName().getEntity()); model.getDescription().setEntity(getSelectedItem().getDescription().getEntity()); model.setParentId(getSelectedItem().getParentId()); UICommand tempVar = new UICommand("OnSave", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void New() { if (getWindow() != null) { return; } TagModel model = new TagModel(); setWindow(model); model.setTitle("New Tag"); model.setHashName("new_tag"); model.setIsNew(true); UICommand tempVar = new UICommand("OnSave", this); tempVar.setTitle("OK"); tempVar.setIsDefault(true); model.getCommands().add(tempVar); UICommand tempVar2 = new UICommand("Cancel", this); tempVar2.setTitle("Cancel"); tempVar2.setIsCancel(true); model.getCommands().add(tempVar2); } public void OnSave() { TagModel model = (TagModel)getWindow(); if (model.getProgress() != null) { return; } if (!model.Validate()) { return; } org.ovirt.engine.core.common.businessentities.tags tempVar = new org.ovirt.engine.core.common.businessentities.tags(); tempVar.settag_id(model.getIsNew() ? Guid.Empty : getSelectedItem().getId()); tempVar.setparent_id(model.getIsNew() ? getSelectedItem().getId() : getSelectedItem().getParentId()); tempVar.settag_name((String)model.getName().getEntity()); tempVar.setdescription((String)model.getDescription().getEntity()); org.ovirt.engine.core.common.businessentities.tags tag = tempVar; model.StartProgress(null); Frontend.RunAction(model.getIsNew() ? VdcActionType.AddTag : VdcActionType.UpdateTag, new TagsOperationParameters(tag), new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { TagListModel localModel = (TagListModel)result.getState(); localModel.PostOnSave(result.getReturnValue()); } }, this); } public void PostOnSave(VdcReturnValueBase returnValue) { TagModel model = (TagModel)getWindow(); model.StopProgress(); if (returnValue != null && returnValue.getSucceeded()) { Cancel(); getSearchCommand().Execute(); } } public void Cancel() { setWindow(null); } @Override protected void OnSelectedItemChanged() { super.OnSelectedItemChanged(); UpdateActionAvailability(); } private void UpdateActionAvailability() { getNewCommand().setIsExecutionAllowed(getSelectedItem() != null); getEditCommand().setIsExecutionAllowed(getSelectedItem() != null && getSelectedItem().getType() == TagModelType.Regular); getRemoveCommand().setIsExecutionAllowed(getSelectedItem() != null && getSelectedItem().getType() == TagModelType.Regular); } @Override public void ExecuteCommand(UICommand command) { super.ExecuteCommand(command); if (command == getResetCommand()) { Reset(); } else if (command == getNewCommand()) { New(); } else if (command == getEditCommand()) { Edit(); } else if (command == getRemoveCommand()) { remove(); } else if (StringHelper.stringsEqual(command.getName(), "Cancel")) { Cancel(); } else if (StringHelper.stringsEqual(command.getName(), "OnSave")) { OnSave(); } else if (StringHelper.stringsEqual(command.getName(), "OnRemove")) { OnRemove(); } } @Override protected String getListName() { return "TagListModel"; } }