How to add a deleted item [SCM]
Hi,
I'm experimenting a bit with the Jazz SCM component and I wonder, if there's
a way to add an item to workspace that has been deleted before.
If reverting the change that deleted this element is the only way to do
that, how would I implement this?
Many thanks,
--Tim
Here's a snippet that shows my example (sorry, it's rather lengthy):
In this example MMClass is a versionable item (inherits from Versionable).
// Create a new workspace.
IWorkspaceHandle workspaceHandleA =
scmService.createWorkspaceWithoutFlows(...);
IWorkspace workspaceA = (IWorkspace) itemService.fetchItem(...);
// Create a component
IComponent component = scmService.createComponent(...);
scmService.addComponent(workspaceHandleA, component,
IScmService.DELTA_PER_INVOCATION, null, null);
IChangeSetHandle changeSet = (IChangeSetHandle)
scmService.createChangeSet( workspaceA, component, ...).getItem();
// create root folder ("/")
List<IVersionable> newItems = new ArrayList<IVersionable>();
IFolder rootFolder = (IFolder) scmService.workspaceRootFolder(
workspaceHandleA, component, null, null, null).getWorkingCopy();
rootFolder.setName("");
newItems.add(rootFolder);
// Just create a new element.
MMClass myElement = (MMClass) getMMClassItemType().createItem();
((IVersionable) myElement).setName("ME_X");
myElement.setMMname("MyClass");
myElement.setParent(rootFolder);
newItems.add(myElement);
// Add new items to the change set and persist elements.
commitSave(workspaceA, changeSet, newItems, new ArrayList<IVersionable>());
getService(IScmService.class).closeChangeSets(
workspaceA, new IChangeSetHandle[] {changeSet}, true, null, null, null);
// Create new workspace initialized with this one just created.
IWorkspaceHandle workspaceHandleB =
scmService.createWorkspaceWithoutFlows(...);
scmService.addComponentFromWorkspace(workspaceHandleB, component,
workspaceHandleA, scmService.DELTA_PER_INVOCATION, null, null);
// We have just one component -- so get the first one!
IComponentHandle componentInB =
scmService.getWorkspaceComponentStateSummaries(workspaceHandleB,
null).getComponent();
// Call a helper method to fetch the element created above (i.e. our model
element).
MMClass myElementInWSB = (MMClass)
fetchVersionableByName("ME_X", MMClass.class, workspaceHandleB,
componentInB);
// Delete the element.
IChangeSetHandle changeSetWSB1 = (IChangeSetHandle)
scmService.createChangeSet(workspaceHandleB, componentInB,
....).getItem();
List<IVersionable> itemsToDelete = new ArrayList<IVersionable>();
itemsToDelete.add(myElementInWSB);
commitSave(workspaceHandleB, changeSetWSB1, new ArrayList<IVersionable>(),
itemsToDelete);
scmService.closeChangeSets(
workspaceHandleB, new IChangeSetHandle[] {changeSetWSB1}, ...);
// Add the element.
IChangeSetHandle changeSetWSB2 = (IChangeSetHandle)
scmService.createChangeSet(...).getItem();
List<IVersionable> itemsToAdd = new ArrayList<IVersionable>();
itemsToAdd.add(myElementInWSB);
// !!!!!!!!!!!!!!!!!
// This call fails -- probably because the element does not exist in this
workspace anymore.
// !!!!!!!!!!!!!!!!!
commitSave(workspaceHandleB, changeSetWSB2, itemsToAdd, new
ArrayList<IVersionable>());
//////////////////////////////
// helper methods
//////////////////////////////
protected void commitSave(IWorkspaceHandle workspace, IChangeSetHandle cs,
List<IVersionable> addedOrModifiedItems, List<IVersionable>
itemsToDelete)
throws TeamRepositoryException {
CommitParameter parm = ScmDtoFactory.eINSTANCE.createCommitParameter();
parm.setChangeSet(cs);
parm.addItemsToSave(addedOrModifiedItems);
parm.addItemsToDelete(itemsToDelete);
getService(IScmService.class).batchCommit(workspace, new
CommitParameter[] {parm},
IScmService.DELTA_PER_INVOCATION, null, null
);
}
I'm experimenting a bit with the Jazz SCM component and I wonder, if there's
a way to add an item to workspace that has been deleted before.
If reverting the change that deleted this element is the only way to do
that, how would I implement this?
Many thanks,
--Tim
Here's a snippet that shows my example (sorry, it's rather lengthy):
In this example MMClass is a versionable item (inherits from Versionable).
// Create a new workspace.
IWorkspaceHandle workspaceHandleA =
scmService.createWorkspaceWithoutFlows(...);
IWorkspace workspaceA = (IWorkspace) itemService.fetchItem(...);
// Create a component
IComponent component = scmService.createComponent(...);
scmService.addComponent(workspaceHandleA, component,
IScmService.DELTA_PER_INVOCATION, null, null);
IChangeSetHandle changeSet = (IChangeSetHandle)
scmService.createChangeSet( workspaceA, component, ...).getItem();
// create root folder ("/")
List<IVersionable> newItems = new ArrayList<IVersionable>();
IFolder rootFolder = (IFolder) scmService.workspaceRootFolder(
workspaceHandleA, component, null, null, null).getWorkingCopy();
rootFolder.setName("");
newItems.add(rootFolder);
// Just create a new element.
MMClass myElement = (MMClass) getMMClassItemType().createItem();
((IVersionable) myElement).setName("ME_X");
myElement.setMMname("MyClass");
myElement.setParent(rootFolder);
newItems.add(myElement);
// Add new items to the change set and persist elements.
commitSave(workspaceA, changeSet, newItems, new ArrayList<IVersionable>());
getService(IScmService.class).closeChangeSets(
workspaceA, new IChangeSetHandle[] {changeSet}, true, null, null, null);
// Create new workspace initialized with this one just created.
IWorkspaceHandle workspaceHandleB =
scmService.createWorkspaceWithoutFlows(...);
scmService.addComponentFromWorkspace(workspaceHandleB, component,
workspaceHandleA, scmService.DELTA_PER_INVOCATION, null, null);
// We have just one component -- so get the first one!
IComponentHandle componentInB =
scmService.getWorkspaceComponentStateSummaries(workspaceHandleB,
null).getComponent();
// Call a helper method to fetch the element created above (i.e. our model
element).
MMClass myElementInWSB = (MMClass)
fetchVersionableByName("ME_X", MMClass.class, workspaceHandleB,
componentInB);
// Delete the element.
IChangeSetHandle changeSetWSB1 = (IChangeSetHandle)
scmService.createChangeSet(workspaceHandleB, componentInB,
....).getItem();
List<IVersionable> itemsToDelete = new ArrayList<IVersionable>();
itemsToDelete.add(myElementInWSB);
commitSave(workspaceHandleB, changeSetWSB1, new ArrayList<IVersionable>(),
itemsToDelete);
scmService.closeChangeSets(
workspaceHandleB, new IChangeSetHandle[] {changeSetWSB1}, ...);
// Add the element.
IChangeSetHandle changeSetWSB2 = (IChangeSetHandle)
scmService.createChangeSet(...).getItem();
List<IVersionable> itemsToAdd = new ArrayList<IVersionable>();
itemsToAdd.add(myElementInWSB);
// !!!!!!!!!!!!!!!!!
// This call fails -- probably because the element does not exist in this
workspace anymore.
// !!!!!!!!!!!!!!!!!
commitSave(workspaceHandleB, changeSetWSB2, itemsToAdd, new
ArrayList<IVersionable>());
//////////////////////////////
// helper methods
//////////////////////////////
protected void commitSave(IWorkspaceHandle workspace, IChangeSetHandle cs,
List<IVersionable> addedOrModifiedItems, List<IVersionable>
itemsToDelete)
throws TeamRepositoryException {
CommitParameter parm = ScmDtoFactory.eINSTANCE.createCommitParameter();
parm.setChangeSet(cs);
parm.addItemsToSave(addedOrModifiedItems);
parm.addItemsToDelete(itemsToDelete);
getService(IScmService.class).batchCommit(workspace, new
CommitParameter[] {parm},
IScmService.DELTA_PER_INVOCATION, null, null
);
}
8 answers
On Mon, 28 Jan 2008 23:57:50 +0100, Tim Schumann wrote:
Can you post the stack trace you are getting? The code snippet you posted
looks correct except maybe you need to call getWorkingCopy() on your Item
before saving it a second time.
- Dmitry
Hi,
I'm experimenting a bit with the Jazz SCM component and I wonder, if
there's a way to add an item to workspace that has been deleted before.
If reverting the change that deleted this element is the only way to do
that, how would I implement this?
Can you post the stack trace you are getting? The code snippet you posted
looks correct except maybe you need to call getWorkingCopy() on your Item
before saving it a second time.
- Dmitry
If the change-set that deleted the item is active, you can undo the
change via commit.
Otherwise, you can commit a new change which selects the desired state
to restore it to the configuration.
@see CommitParameter#getItemsToUndo() and
CommitParameter#getItemsToRevert().
I hope to clean this interface up a bit so it is easier to use.
HTH,
JohnC
Tim Schumann wrote:
change via commit.
Otherwise, you can commit a new change which selects the desired state
to restore it to the configuration.
@see CommitParameter#getItemsToUndo() and
CommitParameter#getItemsToRevert().
I hope to clean this interface up a bit so it is easier to use.
HTH,
JohnC
Tim Schumann wrote:
Hi,
I'm experimenting a bit with the Jazz SCM component and I wonder, if there's
a way to add an item to workspace that has been deleted before.
If reverting the change that deleted this element is the only way to do
that, how would I implement this?
Many thanks,
--Tim
Here's a snippet that shows my example (sorry, it's rather lengthy):
In this example MMClass is a versionable item (inherits from Versionable).
// Create a new workspace.
IWorkspaceHandle workspaceHandleA =
scmService.createWorkspaceWithoutFlows(...);
IWorkspace workspaceA = (IWorkspace) itemService.fetchItem(...);
// Create a component
IComponent component = scmService.createComponent(...);
scmService.addComponent(workspaceHandleA, component,
IScmService.DELTA_PER_INVOCATION, null, null);
IChangeSetHandle changeSet = (IChangeSetHandle)
scmService.createChangeSet( workspaceA, component, ...).getItem();
// create root folder ("/")
List<IVersionable> newItems = new ArrayList<IVersionable>();
IFolder rootFolder = (IFolder) scmService.workspaceRootFolder(
workspaceHandleA, component, null, null, null).getWorkingCopy();
rootFolder.setName("");
newItems.add(rootFolder);
// Just create a new element.
MMClass myElement = (MMClass) getMMClassItemType().createItem();
((IVersionable) myElement).setName("ME_X");
myElement.setMMname("MyClass");
myElement.setParent(rootFolder);
newItems.add(myElement);
// Add new items to the change set and persist elements.
commitSave(workspaceA, changeSet, newItems, new ArrayList<IVersionable>());
getService(IScmService.class).closeChangeSets(
workspaceA, new IChangeSetHandle[] {changeSet}, true, null, null, null);
// Create new workspace initialized with this one just created.
IWorkspaceHandle workspaceHandleB =
scmService.createWorkspaceWithoutFlows(...);
scmService.addComponentFromWorkspace(workspaceHandleB, component,
workspaceHandleA, scmService.DELTA_PER_INVOCATION, null, null);
// We have just one component -- so get the first one!
IComponentHandle componentInB =
scmService.getWorkspaceComponentStateSummaries(workspaceHandleB,
null).getComponent();
// Call a helper method to fetch the element created above (i.e. our model
element).
MMClass myElementInWSB = (MMClass)
fetchVersionableByName("ME_X", MMClass.class, workspaceHandleB,
componentInB);
// Delete the element.
IChangeSetHandle changeSetWSB1 = (IChangeSetHandle)
scmService.createChangeSet(workspaceHandleB, componentInB,
...).getItem();
List<IVersionable> itemsToDelete = new ArrayList<IVersionable>();
itemsToDelete.add(myElementInWSB);
commitSave(workspaceHandleB, changeSetWSB1, new ArrayList<IVersionable>(),
itemsToDelete);
scmService.closeChangeSets(
workspaceHandleB, new IChangeSetHandle[] {changeSetWSB1}, ...);
// Add the element.
IChangeSetHandle changeSetWSB2 = (IChangeSetHandle)
scmService.createChangeSet(...).getItem();
List<IVersionable> itemsToAdd = new ArrayList<IVersionable>();
itemsToAdd.add(myElementInWSB);
// !!!!!!!!!!!!!!!!!
// This call fails -- probably because the element does not exist in this
workspace anymore.
// !!!!!!!!!!!!!!!!!
commitSave(workspaceHandleB, changeSetWSB2, itemsToAdd, new
ArrayList<IVersionable>());
//////////////////////////////
// helper methods
//////////////////////////////
protected void commitSave(IWorkspaceHandle workspace, IChangeSetHandle cs,
List<IVersionable> addedOrModifiedItems, List<IVersionable
itemsToDelete)
throws TeamRepositoryException {
CommitParameter parm = ScmDtoFactory.eINSTANCE.createCommitParameter();
parm.setChangeSet(cs);
parm.addItemsToSave(addedOrModifiedItems);
parm.addItemsToDelete(itemsToDelete);
getService(IScmService.class).batchCommit(workspace, new
CommitParameter[] {parm},
IScmService.DELTA_PER_INVOCATION, null, null
);
}
BTW, extending Versionable may require some adoption code if you plan to
move to our M5D1 deployment. (You may indeed be the first person to do
it outside of the Jazz project itself!)
see the com.ibm.team.scm.tests.service plugin and how it contributes a
repository internal component metadata provider factory in order to
allow for persistance of additional tables in the repo.
JohnC
SCM Server team
Tim Schumann wrote:
move to our M5D1 deployment. (You may indeed be the first person to do
it outside of the Jazz project itself!)
see the com.ibm.team.scm.tests.service plugin and how it contributes a
repository internal component metadata provider factory in order to
allow for persistance of additional tables in the repo.
JohnC
SCM Server team
Tim Schumann wrote:
Hi,
I'm experimenting a bit with the Jazz SCM component and I wonder, if there's
a way to add an item to workspace that has been deleted before.
If reverting the change that deleted this element is the only way to do
that, how would I implement this?
Many thanks,
--Tim
Here's a snippet that shows my example (sorry, it's rather lengthy):
In this example MMClass is a versionable item (inherits from Versionable).
// Create a new workspace.
IWorkspaceHandle workspaceHandleA =
scmService.createWorkspaceWithoutFlows(...);
IWorkspace workspaceA = (IWorkspace) itemService.fetchItem(...);
// Create a component
IComponent component = scmService.createComponent(...);
scmService.addComponent(workspaceHandleA, component,
IScmService.DELTA_PER_INVOCATION, null, null);
IChangeSetHandle changeSet = (IChangeSetHandle)
scmService.createChangeSet( workspaceA, component, ...).getItem();
// create root folder ("/")
List<IVersionable> newItems = new ArrayList<IVersionable>();
IFolder rootFolder = (IFolder) scmService.workspaceRootFolder(
workspaceHandleA, component, null, null, null).getWorkingCopy();
rootFolder.setName("");
newItems.add(rootFolder);
// Just create a new element.
MMClass myElement = (MMClass) getMMClassItemType().createItem();
((IVersionable) myElement).setName("ME_X");
myElement.setMMname("MyClass");
myElement.setParent(rootFolder);
newItems.add(myElement);
// Add new items to the change set and persist elements.
commitSave(workspaceA, changeSet, newItems, new ArrayList<IVersionable>());
getService(IScmService.class).closeChangeSets(
workspaceA, new IChangeSetHandle[] {changeSet}, true, null, null, null);
// Create new workspace initialized with this one just created.
IWorkspaceHandle workspaceHandleB =
scmService.createWorkspaceWithoutFlows(...);
scmService.addComponentFromWorkspace(workspaceHandleB, component,
workspaceHandleA, scmService.DELTA_PER_INVOCATION, null, null);
// We have just one component -- so get the first one!
IComponentHandle componentInB =
scmService.getWorkspaceComponentStateSummaries(workspaceHandleB,
null).getComponent();
// Call a helper method to fetch the element created above (i.e. our model
element).
MMClass myElementInWSB = (MMClass)
fetchVersionableByName("ME_X", MMClass.class, workspaceHandleB,
componentInB);
// Delete the element.
IChangeSetHandle changeSetWSB1 = (IChangeSetHandle)
scmService.createChangeSet(workspaceHandleB, componentInB,
...).getItem();
List<IVersionable> itemsToDelete = new ArrayList<IVersionable>();
itemsToDelete.add(myElementInWSB);
commitSave(workspaceHandleB, changeSetWSB1, new ArrayList<IVersionable>(),
itemsToDelete);
scmService.closeChangeSets(
workspaceHandleB, new IChangeSetHandle[] {changeSetWSB1}, ...);
// Add the element.
IChangeSetHandle changeSetWSB2 = (IChangeSetHandle)
scmService.createChangeSet(...).getItem();
List<IVersionable> itemsToAdd = new ArrayList<IVersionable>();
itemsToAdd.add(myElementInWSB);
// !!!!!!!!!!!!!!!!!
// This call fails -- probably because the element does not exist in this
workspace anymore.
// !!!!!!!!!!!!!!!!!
commitSave(workspaceHandleB, changeSetWSB2, itemsToAdd, new
ArrayList<IVersionable>());
//////////////////////////////
// helper methods
//////////////////////////////
protected void commitSave(IWorkspaceHandle workspace, IChangeSetHandle cs,
List<IVersionable> addedOrModifiedItems, List<IVersionable
itemsToDelete)
throws TeamRepositoryException {
CommitParameter parm = ScmDtoFactory.eINSTANCE.createCommitParameter();
parm.setChangeSet(cs);
parm.addItemsToSave(addedOrModifiedItems);
parm.addItemsToDelete(itemsToDelete);
getService(IScmService.class).batchCommit(workspace, new
CommitParameter[] {parm},
IScmService.DELTA_PER_INVOCATION, null, null
);
}
"Dmitry Karasik" <dkarasik@ca.ibm.com> wrote in message
news:fnn9jo$qjv$1@localhost.localdomain...
Hi Dmitry,
thanks for your response. You were right, I just needed to get the working
copy again and my code worked.
Thanks!
news:fnn9jo$qjv$1@localhost.localdomain...
On Mon, 28 Jan 2008 23:57:50 +0100, Tim Schumann wrote:
Hi,
I'm experimenting a bit with the Jazz SCM component and I wonder, if
there's a way to add an item to workspace that has been deleted before.
If reverting the change that deleted this element is the only way to do
that, how would I implement this?
Can you post the stack trace you are getting? The code snippet you posted
looks correct except maybe you need to call getWorkingCopy() on your Item
before saving it a second time.
Hi Dmitry,
thanks for your response. You were right, I just needed to get the working
copy again and my code worked.
Thanks!
Hi,
"John Camelon" <jcamelon@ca.ibm.com.no.spam> wrote in message
news:fnn9p0$rqq$1@localhost.localdomain...
concept. For this purpose, sticking to Beta 2 should be fine. But for our
future work, I guess we want to stay up-to-date with Jazz (and besides this
I'm definitely interested in ongoing changes in Jazz concerning the SCM ;-))
But I was not able to locate the contributions you mentioned.
I only found the plugins com.ibm.team.scm.tests.service and
com.ibm.team.scm.tests.common that were named similar to the one you pointed
me to but didn't see something like what you mentioned.
Many thanks,
--Tim
"John Camelon" <jcamelon@ca.ibm.com.no.spam> wrote in message
news:fnn9p0$rqq$1@localhost.localdomain...
BTW, extending Versionable may require some adoption code if you plan to
move to our M5D1 deployment. (You may indeed be the first person to do it
outside of the Jazz project itself!)
Thanks for the remark. We're currently planning a prototype as a proof of
concept. For this purpose, sticking to Beta 2 should be fine. But for our
future work, I guess we want to stay up-to-date with Jazz (and besides this
I'm definitely interested in ongoing changes in Jazz concerning the SCM ;-))
see the com.ibm.team.scm.tests.service plugin and how it contributes a
repository internal component metadata provider factory in order to allow
for persistance of additional tables in the repo.
Thanks for the pointer -- sounds great !!.
But I was not able to locate the contributions you mentioned.
I only found the plugins com.ibm.team.scm.tests.service and
com.ibm.team.scm.tests.common that were named similar to the one you pointed
me to but didn't see something like what you mentioned.
Many thanks,
--Tim
JohnC
SCM Server team
Tim Schumann wrote:
Its a new plugin available only in M5D1 onward. Beta2 does not contain
this plugin.
HTH,
JohnC
SCM Server
Thanks for the pointer -- sounds great !!.
But I was not able to locate the contributions you mentioned.
I only found the plugins com.ibm.team.scm.tests.service and
com.ibm.team.scm.tests.common that were named similar to the one you pointed
me to but didn't see something like what you mentioned.
Many thanks,
--Tim
Its a new plugin available only in M5D1 onward. Beta2 does not contain
this plugin.
HTH,
JohnC
SCM Server
Its a new plugin available only in M5D1 onward. Beta2 does not contain
this plugin.
Its a new plugin available only in M5D1 onward. Beta2 does not contain
this plugin.
I see. Are there any major changes planned concerning the SCM?
The thing is, that I don't care too much if the finished plugins need some
minor fixups in order to run with Jazz M5, but if the some more complex
mechanisms implemented in my plugins wouldn't work anymore, this would be
kind of frustrating.
Thanks for your great support!
--Tim
We do have more changes in this release (and again in future releases,
until we freeze model and API).
I should be able to walk you through anything you will need to do in the
near/medium term. Technically what you are doing (implementing your own
Versionable) is not officially supported yet (I believe that the Team
Concert UI may have some weird behaviour when it comes to unknown
Versionables).
Cheers,
JC
Tim Schumann wrote:
until we freeze model and API).
I should be able to walk you through anything you will need to do in the
near/medium term. Technically what you are doing (implementing your own
Versionable) is not officially supported yet (I believe that the Team
Concert UI may have some weird behaviour when it comes to unknown
Versionables).
Cheers,
JC
Tim Schumann wrote:
Its a new plugin available only in M5D1 onward. Beta2 does not contain
this plugin.
Its a new plugin available only in M5D1 onward. Beta2 does not contain
this plugin.
I see. Are there any major changes planned concerning the SCM?
The thing is, that I don't care too much if the finished plugins need some
minor fixups in order to run with Jazz M5, but if the some more complex
mechanisms implemented in my plugins wouldn't work anymore, this would be
kind of frustrating.
Thanks for your great support!
--Tim