[Mantisconnect-cvs] SF.net SVN: mantisconnect: [101] mantisconnect/trunk/clients/java/eclipse/ org
Brought to you by:
vboctor
From: <pl...@us...> - 2007-01-17 18:37:53
|
Revision: 101 http://svn.sourceforge.net/mantisconnect/?rev=101&view=rev Author: planser Date: 2007-01-17 10:18:51 -0800 (Wed, 17 Jan 2007) Log Message: ----------- Fixed #289 and #294 (support for relationships) Modified Paths: -------------- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/dialogs/IssueDialog.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/AttachmentsSection.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/GeneralPage.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/MainAttributesSection.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NewNoteSection.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPage.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPart.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/RelationshipsSection.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/IssuesLabelProvider.java mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/MantisConnectView.java Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/dialogs/IssueDialog.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/dialogs/IssueDialog.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/dialogs/IssueDialog.java 2007-01-17 18:18:51 UTC (rev 101) @@ -41,6 +41,7 @@ import org.mantisbt.connect.Enumeration; import org.mantisbt.connect.ISession; import org.mantisbt.connect.JMTException; +import org.mantisbt.connect.Viewstate; import org.mantisbt.connect.eclipse.CustomFieldType; import org.mantisbt.connect.eclipse.MantisConnectPlugin; import org.mantisbt.connect.eclipse.StatusInfo; @@ -312,12 +313,15 @@ } if (issue.getView_state() != null) { privateIssueButton - .setSelection(issue.getView_state().getId().intValue() == ISession.VS_PRIVATE); + .setSelection(issue.getView_state().getId().intValue() == Viewstate.PRIVATE + .getCode()); } else { privateIssueButton.setSelection(false); } - privateNoteButton.setSelection(Integer.parseInt(session - .getConfigString("default_bugnote_view_status")) == ISession.VS_PRIVATE); + privateNoteButton + .setSelection(Integer.parseInt(session + .getConfigString("default_bugnote_view_status")) == Viewstate.PRIVATE + .getCode()); for (CustomFieldControl control : customControls) { control.refresh(); } @@ -365,9 +369,10 @@ private ObjectRef getViewState(boolean forPrivate) throws JMTException { ObjectRef[] viewStates = session.getEnum(Enumeration.VIEW_STATES); for (int i = 0; i < viewStates.length; i++) { - if (viewStates[i].getId().intValue() == ISession.VS_PRIVATE && forPrivate) { + if (viewStates[i].getId().intValue() == Viewstate.PRIVATE.getCode() && forPrivate) { return viewStates[i]; - } else if (viewStates[i].getId().intValue() == ISession.VS_PUBLIC && !forPrivate) { + } else if (viewStates[i].getId().intValue() == Viewstate.PUBLIC.getCode() + && !forPrivate) { return viewStates[i]; } } @@ -486,7 +491,7 @@ privateIssueButton.setText("Private"); return composite; } - + private void validate() { List<IStatus> status = new ArrayList<IStatus>(); if (summary.getText().trim().length() == 0) { @@ -502,7 +507,8 @@ for (CustomFieldControl customControl : customControls) { status.add(customControl.validate()); } - updateStatus(StatusUtil.getMostSevere((IStatus[]) status.toArray(new IStatus[status.size()]))); + updateStatus(StatusUtil.getMostSevere((IStatus[]) status + .toArray(new IStatus[status.size()]))); } protected void okPressed() { Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/AttachmentsSection.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/AttachmentsSection.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/AttachmentsSection.java 2007-01-17 18:18:51 UTC (rev 101) @@ -1,5 +1,5 @@ /* - * Copyright 2005 Peter Lanser + * Copyright 2006 Peter Lanser * * MantisConnect is copyrighted to Victor Boctor * @@ -24,7 +24,6 @@ import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.graphics.Image; -import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; @@ -113,7 +112,6 @@ ImageHyperlink delete = toolkit.createImageHyperlink(composite, SWT.NONE); delete.setText("Delete"); delete.addHyperlinkListener(new ExistingAttachmentRemovalHyperlinkListener(attachments[i], delete)); - delete.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } } @@ -139,8 +137,6 @@ section.setClient(container); } - - private void addNewAttachment(String filename) { if (! toAdd.contains(filename)) { toAdd.add(filename); @@ -158,7 +154,6 @@ toolkit.createLabel(composite, "(" + calcSize(file.length()) + ")", SWT.NONE); Hyperlink delete = toolkit.createHyperlink(composite, "Delete", SWT.NONE); delete.addHyperlinkListener(new NewAttachmentRemovalHyperlinkListener(filename, composite)); - delete.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); getManagedForm().reflow(true); getSection().layout(true); markDirty(); @@ -211,6 +206,7 @@ public void linkActivated(HyperlinkEvent event) { toAdd.remove(filename); composite.dispose(); + getManagedForm().reflow(true); getSection().layout(true); } @@ -238,6 +234,8 @@ .getImageRegistry().get( MantisConnectPlugin.IMG_DELETE_16)); } + link.getParent().layout(true); + getManagedForm().reflow(true); markDirty(); } Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/GeneralPage.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/GeneralPage.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/GeneralPage.java 2007-01-17 18:18:51 UTC (rev 101) @@ -27,6 +27,8 @@ import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.mantisbt.connect.JMTException; import org.mantisbt.connect.eclipse.MantisConnectPlugin; +import org.mantisbt.connect.eclipse.util.RelationshipInfo; +import org.mantisbt.connect.service.RelationshipData; /** * @author Peter Lanser, pl...@us... @@ -36,15 +38,17 @@ public static final String TITLE = "General"; public static final String ID = "general"; - + private AttachmentsSection attachmentsSection; + private RelationshipsSection relationshipsSection; + public GeneralPage(IssueEditor editor) { super(editor, ID, TITLE); } public void doSave(IProgressMonitor monitor) { - monitor.beginTask("Updating attachments", 2); + monitor.beginTask("Updating attachments", 4); try { super.doSave(monitor); String[] attachmentsToAdd = attachmentsSection.getAttachmentsToAdd(); @@ -63,6 +67,27 @@ } } monitor.worked(1); + RelationshipInfo[] relationshipsToAdd = relationshipsSection.getRelationshipsToAdd(); + if (relationshipsToAdd.length > 0) { + monitor.subTask("Adding new relationships"); + for (int i = 0; i < relationshipsToAdd.length; i++) { + RelationshipData data = new RelationshipData(); + data.setTarget_id(relationshipsToAdd[i].getTargetId()); + data.setType(relationshipsToAdd[i].getType()); + getSession().addRelationship(getIssue().getId().longValue(), data); + } + } + monitor.worked(1); + BigInteger[] relatinshipsToDelete = relationshipsSection + .getRelationshipsToDelete(); + if (relatinshipsToDelete.length > 0) { + monitor.subTask("Deleting relationships"); + for (int i = 0; i < relatinshipsToDelete.length; i++) { + getSession().deleteRelationship(getIssue().getId().longValue(), + relatinshipsToDelete[i].longValue()); + } + } + monitor.worked(1); } catch (Exception e) { MantisConnectPlugin.getDefault().error("Error while updating attachments.", e, true); monitor.setCanceled(true); @@ -70,7 +95,7 @@ monitor.done(); } } - + private void addAttachment(String filename) throws IOException, JMTException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); FileInputStream fis = new FileInputStream(filename); @@ -98,7 +123,8 @@ } attachmentsSection = createAttachmentsSection(form.getBody()); managedForm.addPart(attachmentsSection); - managedForm.addPart(createRelationshipsSection(form.getBody())); + relationshipsSection = createRelationshipsSection(form.getBody()); + managedForm.addPart(relationshipsSection); } private RelationshipsSection createRelationshipsSection(Composite parent) { @@ -129,7 +155,7 @@ textSection.getSection().setLayoutData(gd); return textSection; } - + private ExpandableTextSection createAdditionalInfoSection(Composite parent) { ExpandableTextSection textSection = new AdditionalInfoSection(this, parent); TableWrapData gd = new TableWrapData(TableWrapData.FILL_GRAB); @@ -145,7 +171,7 @@ textSection.getSection().setLayoutData(gd); return textSection; } - + private CustomFieldsSection createCustomFieldsPart(Composite parent) { CustomFieldsSection part = new CustomFieldsSection(this, parent); TableWrapData gd = new TableWrapData(TableWrapData.FILL_GRAB); @@ -153,7 +179,7 @@ part.getSection().setLayoutData(gd); return part; } - + private MainAttributesSection createMainAttributesSection(Composite parent) { MainAttributesSection mainAttributesSection = new MainAttributesSection(this, parent); TableWrapData gd = new TableWrapData(TableWrapData.FILL_GRAB); Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/MainAttributesSection.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/MainAttributesSection.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/MainAttributesSection.java 2007-01-17 18:18:51 UTC (rev 101) @@ -28,6 +28,7 @@ import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; +import org.mantisbt.connect.AccessLevel; import org.mantisbt.connect.Enumeration; import org.mantisbt.connect.JMTException; import org.mantisbt.connect.eclipse.MantisConnectPlugin; @@ -150,7 +151,8 @@ private AccountData[] getProjectUsers(ObjectRef project, int level) { try { if (level >= 0) { - return getSession().getProjectUsers(project.getId().longValue(), level); + return getSession().getProjectUsers(project.getId().longValue(), + AccessLevel.fromCode(level)); } else { return null; } Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NewNoteSection.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NewNoteSection.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NewNoteSection.java 2007-01-17 18:18:51 UTC (rev 101) @@ -12,7 +12,7 @@ import org.eclipse.ui.forms.events.ExpansionEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Section; -import org.mantisbt.connect.ISession; +import org.mantisbt.connect.Viewstate; public class NewNoteSection extends IssuePart { @@ -62,8 +62,8 @@ private boolean getViewStateDefault() { try { - return Integer.parseInt(getSession().getConfigString( - "default_bugnote_view_status")) == ISession.VS_PRIVATE; + return Integer.parseInt(getSession().getConfigString("default_bugnote_view_status")) == Viewstate.PRIVATE + .getCode(); } catch (Exception e) { return false; } Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPage.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPage.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPage.java 2007-01-17 18:18:51 UTC (rev 101) @@ -21,8 +21,8 @@ import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; import org.mantisbt.connect.Enumeration; -import org.mantisbt.connect.ISession; import org.mantisbt.connect.JMTException; +import org.mantisbt.connect.Viewstate; import org.mantisbt.connect.eclipse.MantisConnectPlugin; import org.mantisbt.connect.service.IssueNoteData; import org.mantisbt.connect.service.ObjectRef; @@ -97,9 +97,10 @@ private ObjectRef getViewState(boolean forPrivate) throws JMTException { ObjectRef[] viewStates = getSession().getEnum(Enumeration.VIEW_STATES); for (int i = 0; i < viewStates.length; i++) { - if (viewStates[i].getId().intValue() == ISession.VS_PRIVATE && forPrivate) { + if (viewStates[i].getId().intValue() == Viewstate.PRIVATE.getCode() && forPrivate) { return viewStates[i]; - } else if (viewStates[i].getId().intValue() == ISession.VS_PUBLIC && !forPrivate) { + } else if (viewStates[i].getId().intValue() == Viewstate.PUBLIC.getCode() + && !forPrivate) { return viewStates[i]; } } Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPart.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPart.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/NotesPart.java 2007-01-17 18:18:51 UTC (rev 101) @@ -39,7 +39,7 @@ import org.eclipse.ui.forms.widgets.ScrolledForm; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; -import org.mantisbt.connect.ISession; +import org.mantisbt.connect.Viewstate; import org.mantisbt.connect.eclipse.MantisConnectPlugin; import org.mantisbt.connect.service.IssueData; import org.mantisbt.connect.service.IssueNoteData; @@ -150,7 +150,7 @@ } private boolean isPrivate(IssueNoteData note) { - return note.getView_state().getId().intValue() == ISession.VS_PRIVATE; + return note.getView_state().getId().intValue() == Viewstate.PRIVATE.getCode(); } private class TextHyperlinkListener extends HyperlinkAdapter { Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/RelationshipsSection.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/RelationshipsSection.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/editors/RelationshipsSection.java 2007-01-17 18:18:51 UTC (rev 101) @@ -1,5 +1,5 @@ /* - * Copyright 2005 Peter Lanser + * Copyright 2006 Peter Lanser * * MantisConnect is copyrighted to Victor Boctor * @@ -11,23 +11,37 @@ */ package org.mantisbt.connect.eclipse.editors; +import java.math.BigInteger; +import java.util.HashSet; + import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; +import org.eclipse.jface.dialogs.InputDialog; +import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.ui.IViewPart; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormText; import org.eclipse.ui.forms.widgets.FormToolkit; +import org.eclipse.ui.forms.widgets.ImageHyperlink; import org.eclipse.ui.forms.widgets.Section; import org.eclipse.ui.forms.widgets.TableWrapData; import org.eclipse.ui.forms.widgets.TableWrapLayout; +import org.mantisbt.connect.Enumeration; import org.mantisbt.connect.JMTException; import org.mantisbt.connect.eclipse.MantisConnectPlugin; import org.mantisbt.connect.eclipse.actions.OpenIssueAction; +import org.mantisbt.connect.eclipse.dialogs.RelationshipDialog; +import org.mantisbt.connect.eclipse.util.RelationshipInfo; +import org.mantisbt.connect.eclipse.util.Utilities; +import org.mantisbt.connect.eclipse.views.MantisConnectView; import org.mantisbt.connect.service.IssueData; -import org.mantisbt.connect.service.ObjectRef; +import org.mantisbt.connect.service.IssueHeaderData; import org.mantisbt.connect.service.RelationshipData; /** @@ -35,6 +49,10 @@ */ public class RelationshipsSection extends IssuePart { + private HashSet<BigInteger> toDelete = new HashSet<BigInteger>(); + + private HashSet<RelationshipInfo> toAdd = new HashSet<RelationshipInfo>(); + private FormText formText; public RelationshipsSection(IssuePage page, Composite parent) { @@ -42,13 +60,113 @@ getSection().setText("Relationships"); } + public void refresh() { + toAdd.clear(); + toDelete.clear(); + Control[] children = ((Composite) getSection().getClient()).getChildren(); + for (int i = 0; i < children.length; i++) { + if (!(children[i] instanceof ImageHyperlink)) { + children[i].dispose(); + } + } + fillExistingRelationships((Composite) getSection().getClient(), getManagedForm() + .getToolkit()); + getSection().layout(true); + super.refresh(); + } + + private void fillExistingRelationships(Composite container, FormToolkit toolkit) { + RelationshipInfo[] relations = fetchRelations(); + for (int i = 0; i < relations.length; i++) { + RelationshipInfo relation = relations[i]; + Composite composite = toolkit.createComposite(container); + composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); + TableWrapLayout gl = new TableWrapLayout(); + gl.numColumns = 2; + gl.bottomMargin = gl.topMargin = gl.leftMargin = gl.rightMargin = 0; + composite.setLayout(gl); + FormText formText = createFormText(toolkit, relation, composite); + formText.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); + ImageHyperlink delete = toolkit.createImageHyperlink(composite, SWT.NONE); + delete.setText("Delete"); + delete.addHyperlinkListener(new ExistingRelationshipRemovalHyperlinkListener(relation, + delete)); + delete.setLayoutData(new TableWrapData(TableWrapData.RIGHT)); + } + } + + private FormText createFormText(FormToolkit toolkit, RelationshipInfo relation, + Composite composite) { + FormText formText = toolkit.createFormText(composite, true); + StringBuffer buffer = new StringBuffer("<form>"); + buffer.append("<li>").append(relation.getType().getName()); + if (relation.getTargetStatus() != null && relation.getTargetSummary() != null) { + buffer.append(" ").append(relation.getTargetId()); + buffer.append(" (").append( + Utilities.getEnumerationLabel(getSession(), Enumeration.STATUS, relation + .getTargetStatus())).append(") "); + buffer.append("<a href=\"").append(relation.getTargetId()).append("\">"); + buffer.append(relation.getTargetSummary()).append("</a>"); + } else { + buffer.append(" <a href=\"").append(relation.getTargetId()).append("\">"); + buffer.append(relation.getTargetId()).append("</a>"); + } + buffer.append("</li>"); + buffer.append("</form>"); + formText.setText(buffer.toString(), true, false); + formText.addHyperlinkListener(new HyperlinkAdapter() { + public void linkActivated(final HyperlinkEvent e) { + BusyIndicator.showWhile(getSection().getShell().getDisplay(), new Runnable() { + public void run() { + OpenIssueAction openIssueAction = new OpenIssueAction(getConnection(), + getSession(), Long.parseLong((String) e.getHref())); + openIssueAction.run(); + if (openIssueAction.getError() != null) { + if (openIssueAction.getError() instanceof PartInitException) { + MantisConnectPlugin.getDefault().error("Could not open part.", + openIssueAction.getError(), true); + } else if (openIssueAction.getError() instanceof JMTException) { + MantisConnectPlugin.getDefault().error("Could not fetch issue.", + openIssueAction.getError(), true); + } else { + MantisConnectPlugin.getDefault().error( + "An unexpected error occurred.", + openIssueAction.getError(), true); + } + } + } + }); + } + }); + return formText; + } + protected void createClient(Section section, FormToolkit toolkit) { Composite container = toolkit.createComposite(section); TableWrapLayout layout = new TableWrapLayout(); layout.bottomMargin = layout.topMargin = layout.leftMargin = layout.rightMargin = 2; - layout.verticalSpacing = 7; - layout.numColumns = 4; + layout.numColumns = 1; container.setLayout(layout); + ImageHyperlink addRelationship = toolkit.createImageHyperlink(container, SWT.NONE); + addRelationship.setText("Add relationship"); + addRelationship.setImage(MantisConnectPlugin.getDefault().getImageRegistry().get( + MantisConnectPlugin.IMG_NEW_16)); + addRelationship.addHyperlinkListener(new HyperlinkAdapter() { + public void linkActivated(HyperlinkEvent e) { + IViewPart view = PlatformUI.getWorkbench().getActiveWorkbenchWindow() + .getActivePage().findView(MantisConnectView.ID); + IssueHeaderData[] issues = null; + if (view != null) { + issues = ((MantisConnectView) view).getCurrentIssues(); + } else { + issues = new IssueHeaderData[0]; + } + RelationshipDialog dialog = new RelationshipDialog(getSection().getShell(), issues); + if (dialog.open() == InputDialog.OK) { + addNewRelationship(dialog.getRelationship()); + } + } + }); formText = toolkit.createFormText(container, true); formText.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); formText.addHyperlinkListener(new HyperlinkAdapter() { @@ -75,68 +193,107 @@ }); } }); - fillFormText(); toolkit.paintBordersFor(container); section.setClient(container); } - - private void fillFormText() { - Relation[] relations = fetchRelations(); - StringBuffer buffer = new StringBuffer("<form>"); - for (int i = 0; i < relations.length; i++) { - buffer.append("<li>").append(relations[i].getType().getName()) - .append(" "); - buffer.append(relations[i].getIssue().getId()); - buffer.append(" (").append( - relations[i].getIssue().getStatus().getName()).append(") "); - buffer.append("<a href=\"").append(relations[i].getIssue().getId()) - .append("\">"); - buffer.append(relations[i].getIssue().getSummary()).append("</a>"); - buffer.append("</li>"); + + private void addNewRelationship(RelationshipInfo relationship) { + if (! toAdd.contains(relationship)) { + toAdd.add(relationship); + Composite container = (Composite) getSection().getClient(); + FormToolkit toolkit = getManagedForm().getToolkit(); + Composite composite = toolkit.createComposite(container); + composite.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); + TableWrapLayout gl = new TableWrapLayout(); + gl.numColumns = 2; + gl.bottomMargin = gl.topMargin = gl.leftMargin = gl.rightMargin = 0; + composite.setLayout(gl); + FormText formText = createFormText(toolkit, relationship, composite); + formText.setLayoutData(new TableWrapData(TableWrapData.FILL_GRAB)); + ImageHyperlink delete = toolkit.createImageHyperlink(composite, SWT.NONE); + delete.setText("Delete"); + delete.addHyperlinkListener(new NewRelationshipRemovalHyperlinkListener(relationship, + composite)); + delete.setLayoutData(new TableWrapData(TableWrapData.RIGHT)); + getManagedForm().reflow(true); + getSection().layout(true); + markDirty(); } - buffer.append("</form>"); - formText.setText(buffer.toString(), true, false); } - private Relation[] fetchRelations() { - Relation[] relations = new Relation[getIssue().getRelationships().length]; + private RelationshipInfo[] fetchRelations() { + RelationshipInfo[] relations = new RelationshipInfo[getIssue().getRelationships().length]; try { for (int i = 0; i < relations.length; i++) { RelationshipData relationship = getIssue().getRelationships()[i]; - relations[i] = new Relation(relationship.getType(), - getSession().getIssue( - relationship.getTarget_id().longValue())); + IssueData issue = getSession().getIssue(relationship.getTarget_id().longValue()); + relations[i] = new RelationshipInfo(relationship.getId(), relationship.getType(), + issue.getId(), issue.getSummary(), issue.getStatus().getId()); } } catch (Exception e) { - MantisConnectPlugin.getDefault().error( - "Could not fetch related issues.", e, true); - relations = new Relation[0]; + MantisConnectPlugin.getDefault().error("Could not fetch related issues.", e, true); + relations = new RelationshipInfo[0]; } return relations; } - - @Override + public IStatus[] validate() { return new IStatus[] { Status.OK_STATUS }; } + + public RelationshipInfo[] getRelationshipsToAdd() { + return toAdd.toArray(new RelationshipInfo[toAdd.size()]); + } + + public BigInteger[] getRelationshipsToDelete() { + return toDelete.toArray(new BigInteger[toDelete.size()]); + } + + private class NewRelationshipRemovalHyperlinkListener extends HyperlinkAdapter { + + private RelationshipInfo relation; + + private Composite composite; - private class Relation { + public NewRelationshipRemovalHyperlinkListener(RelationshipInfo relation, Composite composite) { + this.relation = relation; + this.composite = composite; + } + + public void linkActivated(HyperlinkEvent event) { + toAdd.remove(relation); + composite.dispose(); + getManagedForm().reflow(true); + getSection().layout(true); + } + + } - private ObjectRef type; + private class ExistingRelationshipRemovalHyperlinkListener extends HyperlinkAdapter { - private IssueData issue; + private RelationshipInfo relation; - public Relation(ObjectRef type, IssueData issue) { - this.type = type; - this.issue = issue; - } + private ImageHyperlink link; - public ObjectRef getType() { - return type; + public ExistingRelationshipRemovalHyperlinkListener(RelationshipInfo relation, ImageHyperlink link) { + this.relation = relation; + this.link = link; } - public IssueData getIssue() { - return issue; + public void linkActivated(HyperlinkEvent event) { + if (toDelete.contains(relation.getId())) { + toDelete.remove(relation.getId()); + link.setText("Delete"); + link.setImage(null); + } else { + toDelete.add(relation.getId()); + link.setText("Undelete"); + link.setImage(MantisConnectPlugin.getDefault().getImageRegistry().get( + MantisConnectPlugin.IMG_DELETE_16)); + } + link.getParent().layout(true); + getManagedForm().reflow(true); + markDirty(); } } Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/IssuesLabelProvider.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/IssuesLabelProvider.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/IssuesLabelProvider.java 2007-01-17 18:18:51 UTC (rev 101) @@ -24,13 +24,14 @@ import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; +import org.mantisbt.connect.AccessLevel; import org.mantisbt.connect.Enumeration; -import org.mantisbt.connect.ISession; import org.mantisbt.connect.JMTException; +import org.mantisbt.connect.Viewstate; import org.mantisbt.connect.eclipse.MantisConnectPlugin; +import org.mantisbt.connect.eclipse.util.Utilities; import org.mantisbt.connect.service.AccountData; import org.mantisbt.connect.service.IssueHeaderData; -import org.mantisbt.connect.service.ObjectRef; /** * @author Peter Lanser, pl...@us... @@ -95,7 +96,7 @@ MantisConnectPlugin.IMG_PRIO_IMMEDIATE_16); } } else if (columnIndex == MantisConnectView.COLUMN_VIEWSTATE + prefixColumnCount) { - if (issue.getView_state().longValue() == ISession.VS_PRIVATE) { + if (issue.getView_state().longValue() == Viewstate.PRIVATE.getCode()) { return MantisConnectPlugin.getDefault().getImageRegistry().get( MantisConnectPlugin.IMG_PRIVATE_16); } @@ -138,10 +139,11 @@ } else if (columnIndex == MantisConnectView.COLUMN_CATEGORY + prefixColumnCount) { return issue.getCategory() == null ? "" : issue.getCategory(); } else if (columnIndex == MantisConnectView.COLUMN_SEVERITY + prefixColumnCount) { - return getEnumerationLabel(Enumeration.SEVERITIES, issue.getSeverity()); + return Utilities.getEnumerationLabel(view.getSession(), Enumeration.SEVERITIES, issue + .getSeverity()); } else if (columnIndex == MantisConnectView.COLUMN_STATUS + prefixColumnCount) { - StringBuffer buffer = new StringBuffer(getEnumerationLabel(Enumeration.STATUS, issue - .getStatus())); + StringBuffer buffer = new StringBuffer(Utilities.getEnumerationLabel(view.getSession(), + Enumeration.STATUS, issue.getStatus())); if (issue.getHandler() != null) { buffer.append(" (").append(getHandlerLabel(issue.getProject(), issue.getHandler())) .append(")"); @@ -168,8 +170,8 @@ private String getHandlerLabel(BigInteger projectId, BigInteger handler) { try { - AccountData[] data = view.getSession().getProjectUsers( - projectId.longValue(), ISession.AL_ANYBODY); + AccountData[] data = view.getSession().getProjectUsers(projectId.longValue(), + AccessLevel.ANYBODY); for (AccountData account : data) { if (account.getId().equals(handler)) { return account.getName(); @@ -180,23 +182,6 @@ return handler.toString(); } - private String getEnumerationLabel(Enumeration enumeration, BigInteger severity) { - try { - ObjectRef[] severities = view.getSession().getEnum(enumeration); - for (ObjectRef ref : severities) { - if (ref.getId().equals(severity)) { - return ref.getName(); - } - } - } catch (JMTException e) { - } - return severity.toString(); - } - - public void dispose() { - super.dispose(); - } - public Font getFont(Object element, int columnIndex) { if (columnIndex == MantisConnectView.COLUMN_UPDATED + prefixColumnCount && doHighlight(element)) { return JFaceResources.getFontRegistry().getBold(JFaceResources.DEFAULT_FONT); Modified: mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/MantisConnectView.java =================================================================== --- mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/MantisConnectView.java 2007-01-17 18:14:32 UTC (rev 100) +++ mantisconnect/trunk/clients/java/eclipse/org.mantisbt.connect.eclipse/src/org/mantisbt/connect/eclipse/views/MantisConnectView.java 2007-01-17 18:18:51 UTC (rev 101) @@ -91,6 +91,8 @@ * @author Peter Lanser, pl...@us... */ public class MantisConnectView extends ViewPart implements IssueViewer { + + public static String ID = "org.mantisbt.connect.eclipse.views.MantisConnectView"; private static final String TAG_CURRENT_CONNECTION = "current-connection"; @@ -960,4 +962,8 @@ }); } + public IssueHeaderData[] getCurrentIssues() { + return (IssueHeaderData[]) issues.getInput(); + } + } \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |