static void dragData_DragCompleted(object sender, MouseButtonEventArgs e) { DragButtonData dragData = (DragButtonData)sender; PIM_Class draggedClass = ((PIM_Class)dragData.DraggedObject); XCaseCanvas ActiveDiagramView = draggedClass.XCaseCanvas; dragData.DraggedObject.Visibility = Visibility.Hidden; ActiveDiagramView.Children.Remove(dragData.DraggedObject); ActiveDiagramView.State = ECanvasState.Normal; if (draggedClass.Left > 0 && draggedClass.Top > 0) { if (ActiveDiagramView.Diagram is PIMDiagram) { ElementToDiagramCommand <Class, ClassViewHelper> command = (ElementToDiagramCommand <Class, ClassViewHelper>)dragData.CommandFactory.Create(ActiveDiagramView.Controller); command.ViewHelper.X = draggedClass.Left; command.ViewHelper.Y = draggedClass.Top; command.IncludedElement = new ElementHolder <Class> { Element = (Class)draggedClass.ModelElement }; command.Execute(); } else if (ActiveDiagramView.Diagram is PSMDiagram) { DerivePSMClassToDiagramCommand c = (DerivePSMClassToDiagramCommand)DerivePSMClassToDiagramCommandFactory.Factory().Create(ActiveDiagramView.Controller.ModelController); c.Set(draggedClass.ClassController.Class, (PSMDiagram)ActiveDiagramView.Diagram); if (c.CanExecute()) { c.Execute(); } } } }
public void AddElementToDiagram <ElementType, ViewHelperType>(ElementType element) where ElementType : class, Element where ViewHelperType : ViewHelper, new() { ElementToDiagramCommand <ElementType, ViewHelperType> command = (ElementToDiagramCommand <ElementType, ViewHelperType>)(ElementToDiagramCommandFactory <ElementType, ViewHelperType> .Factory().Create(this)); command.IncludedElement = new ElementHolder <ElementType> { Element = element }; command.Execute(); }
void GeneratePSM(I_PSMHasChildren current) { foreach (I_PSMHasParent child in current.Children) { //TODO: Macrocommand if (child is P_PSMClass) { //UPDATE GUI: This is wrong, but better than crash due to detected deadlock: X.l.Content = (++currentClassCount).ToString() + "/" + X.ClassesCount.ToString() + " PSM Classes"; X.p.Value = currentClassCount; if (currentClassCount % (Math.Min(25, X.ClassesCount / 10) + 1) == 0) { Application.Current.Dispatcher.Invoke(DispatcherPriority.Background, new ThreadStart(delegate { })); } P_PSMClass C = child as P_PSMClass; ElementHolder <PSMClass> hldPSMClass = new ElementHolder <PSMClass>(); NewPSMClassCommand c0 = NewPSMClassCommandFactory.Factory().Create(DiagramController.ModelController) as NewPSMClassCommand; c0.RepresentedClass = tempPIMClass; c0.CreatedClass = hldPSMClass; c0.Execute(); C.Super = hldPSMClass.Element; //TODO commandy hldPSMClass.Element.Name = C.Name.Name; hldPSMClass.Element.ElementName = C.ElementLabel; PSMClassToDiagram_ModelCommand c1_1 = PSMClassToDiagram_ModelCommandFactory.Factory().Create(DiagramController.ModelController) as PSMClassToDiagram_ModelCommand; c1_1.Set(hldPSMClass, new HolderBase <PSMDiagram>(DiagramController.Diagram as PSMDiagram)); c1_1.Execute(); //Attributes foreach (P_PSMAttribute A in C.Attributes) { NewAttributeCommand c5 = NewAttributeCommandFactory.Factory().Create(DiagramController.ModelController) as NewAttributeCommand; c5.Owner = C.Super as PSMClass; c5.Name = A.Alias; c5.Default = A.DefaultValue; c5.Lower = A.Lower; c5.Upper = A.Upper; ElementHolder <Property> h = new ElementHolder <Property>(); c5.createdAttributeHolder = h; //Model.SimpleDataType T = DiagramController.Project.Schema.. //c5.Type.Element //XmlSchemaType.GetBuiltInSimpleType(A.type); c5.Execute(); (h.Element as PSMAttribute).Alias = A.Alias; } if (current is P_PSMDiagram) { AddPSMClassToRoots_ModelCommand c1 = AddPSMClassToRoots_ModelCommandFactory.Factory().Create(DiagramController.ModelController) as AddPSMClassToRoots_ModelCommand; c1.Set(hldPSMClass, new HolderBase <PSMDiagram>(DiagramController.Diagram as PSMDiagram)); c1.Execute(); } else { if (C.ExtensionOf != null) { NewPSMSpecializationCommand c2s = NewPSMSpecializationCommandFactory.Factory().Create(DiagramController.ModelController) as NewPSMSpecializationCommand; c2s.GeneralPSMClass = new ElementHolder <PSMClass>() { Element = (current as P_PSMClass).Super as PSMClass }; c2s.SpecificPSMClass = new ElementHolder <PSMClass>() { Element = C.Super as PSMClass }; ElementHolder <Generalization> hldGeneralization = new ElementHolder <Generalization>(); c2s.CreatedGeneralization = hldGeneralization; c2s.Execute(); ElementToDiagramCommand <Generalization, GeneralizationViewHelper> c5s = (ElementToDiagramCommand <Generalization, GeneralizationViewHelper>) ElementToDiagramCommandFactory <Generalization, GeneralizationViewHelper> .Factory().Create(DiagramController); c5s.IncludedElement = hldGeneralization; c5s.Execute(); } else { NewPSMAssociationCommand c2 = NewPSMAssociationCommandFactory.Factory().Create(DiagramController.ModelController) as NewPSMAssociationCommand; ElementHolder <PSMAssociation> hldAssoc = new ElementHolder <PSMAssociation>(); c2.Lower = C.MinOccurs; c2.Upper = C.MaxOccurs; c2.Set((current as P_PSMBase).Super, hldPSMClass.Element, hldAssoc, null); c2.Execute(); ElementToDiagramCommand <PSMAssociation, PSMAssociationViewHelper> c5 = (ElementToDiagramCommand <PSMAssociation, PSMAssociationViewHelper>) ElementToDiagramCommandFactory <PSMAssociation, PSMAssociationViewHelper> .Factory().Create(DiagramController); c5.IncludedElement = hldAssoc; c5.Execute(); } } GeneratePSM(C); } else if (!(current is P_PSMDiagram) && child is P_PSMContentChoice) { NewPSMContentChoiceCommand c3 = NewPSMContentChoiceCommandFactory.Factory().Create(DiagramController) as NewPSMContentChoiceCommand; c3.Parent = (current as P_PSMBase).Super; c3.Execute(); (child as P_PSMContentChoice).Super = c3.CreatedChoice.Element; GeneratePSM(child as P_PSMContentChoice); } else if (!(current is P_PSMDiagram) && child is P_PSMAttributeContainer) { NewPSMAttributeContainerCommand c4 = NewPSMAttributeContainerCommandFactory.Factory().Create(DiagramController) as NewPSMAttributeContainerCommand; PSMClass owner = null; if (current is P_PSMClass) { owner = c4.PSMClass = (current as P_PSMClass).Super as PSMClass; } else if (current is P_PSMContentChoice) { c4.PSMSuper = (current as P_PSMContentChoice).Super as PSMSuperordinateComponent; owner = c4.PSMClass = (current as P_PSMContentChoice).P_PSMClass.Super as PSMClass; } else if (current is P_PSMContentContainer) { c4.PSMSuper = (current as P_PSMContentContainer).Super as PSMSuperordinateComponent; owner = c4.PSMClass = (current as P_PSMContentContainer).P_PSMClass.Super as PSMClass; } foreach (P_PSMAttribute A in (child as P_PSMAttributeContainer).Attributes) { NewAttributeCommand c5 = NewAttributeCommandFactory.Factory().Create(DiagramController.ModelController) as NewAttributeCommand; c5.Owner = owner; c5.Name = A.Alias; c5.Default = A.DefaultValue; c5.Lower = A.Lower; c5.Upper = A.Upper; ElementHolder <Property> h = new ElementHolder <Property>(); c5.createdAttributeHolder = h; c5.Execute(); (h.Element as PSMAttribute).Alias = A.Alias; c4.PSMAttributes.Add(h.Element as PSMAttribute); } c4.Execute(); } else if ((current is P_PSMClass) && child is P_PSMComment) { NewModelCommentToDiagramCommand C = NewModelCommentaryToDiagramCommandFactory.Factory().Create(DiagramController) as NewModelCommentToDiagramCommand; C.AnnotatedElement = (current as P_PSMClass).Super; C.Text = (child as P_PSMComment).text; C.Set(DiagramController.ModelController, DiagramController.ModelController.Model); C.Execute(); } else if (!(current is P_PSMDiagram) && child is P_PSMContentContainer) { P_PSMContentContainer CC = child as P_PSMContentContainer; NewPSMContentContainerCommand C = NewPSMContentContainerCommandFactory.Factory().Create(DiagramController) as NewPSMContentContainerCommand; if (current is P_PSMBase) { C.Parent = (current as P_PSMBase).Super; } C.Name = CC.ElementLabel; C.Execute(); CC.Super = C.CreatedContainer.Element; GeneratePSM(CC); } } }