Skip to content

Commit d54c737

Browse files
committed
archi-modelrepository-plugin object-history
1 parent 68f1773 commit d54c737

5 files changed

Lines changed: 160 additions & 69 deletions

File tree

org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/actions/RestoreCommitAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ public class RestoreCommitAction extends AbstractModelAction {
3535

3636
public RestoreCommitAction(IWorkbenchWindow window) {
3737
super(window);
38-
setImageDescriptor(IModelRepositoryImages.ImageFactory.getImageDescriptor(IModelRepositoryImages.ICON_SYNCED));
38+
setImageDescriptor(IModelRepositoryImages.ImageFactory.getImageDescriptor(IModelRepositoryImages.ICON_RESET));
3939
setText(Messages.RestoreCommitAction_0);
4040
setToolTipText(Messages.RestoreCommitAction_0);
4141
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.archicontribs.modelrepository.grafico;
2+
3+
import java.io.File;
4+
5+
import org.eclipse.emf.ecore.EObject;
6+
7+
import com.archimatetool.model.FolderType;
8+
import com.archimatetool.model.IFolder;
9+
import com.archimatetool.model.IIdentifier;
10+
11+
public final class GraficoFileConventions {
12+
13+
private GraficoFileConventions() {
14+
// utility class
15+
}
16+
17+
public static File forFolder(File parentFolder, IFolder iFolder) {
18+
return new File(parentFolder, GraficoFileConventions.getNameFor(iFolder));
19+
}
20+
21+
public static File forElement(File modelFolder, IFolder iFolder, EObject elem) {
22+
File elemFolder = new File(modelFolder, GraficoFileConventions.getNameFor(iFolder));
23+
return GraficoFileConventions.forElement(elemFolder, elem);
24+
}
25+
26+
public static File forElement(File elemFolder, EObject elem) {
27+
return new File(elemFolder, elem.getClass().getSimpleName() + "_" + ((IIdentifier) elem).getId() + ".xml"); //$NON-NLS-1$ //$NON-NLS-2$
28+
}
29+
30+
/**
31+
* Generate a proper name for directory creation
32+
*
33+
* @param folder
34+
* @return
35+
*/
36+
public static String getNameFor(IFolder folder) {
37+
return folder.getType() == FolderType.USER ? folder.getId().toString() : folder.getType().toString();
38+
}
39+
40+
}

org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/grafico/GraficoModelExporter.java

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,10 @@
3636

3737
import com.archimatetool.editor.model.IArchiveManager;
3838
import com.archimatetool.editor.utils.FileUtils;
39-
import com.archimatetool.model.FolderType;
4039
import com.archimatetool.model.IArchimateModel;
4140
import com.archimatetool.model.IDiagramModelImageProvider;
4241
import com.archimatetool.model.IFolder;
4342
import com.archimatetool.model.IFolderContainer;
44-
import com.archimatetool.model.IIdentifier;
4543

4644

4745
/**
@@ -177,7 +175,7 @@ private void createAndSaveResourceForFolder(IFolderContainer folderContainer, Fi
177175
allFolders.addAll(folderContainer.getFolders());
178176

179177
for(IFolder tmpFolder : allFolders) {
180-
File tmpFolderFile = new File(folder, getNameFor(tmpFolder));
178+
File tmpFolderFile = GraficoFileConventions.forFolder(folder, tmpFolder);
181179
tmpFolderFile.mkdirs();
182180
createAndSaveResource(new File(tmpFolderFile, IGraficoConstants.FOLDER_XML), tmpFolder);
183181
createAndSaveResourceForFolder(tmpFolder, tmpFolderFile);
@@ -190,25 +188,15 @@ private void createAndSaveResourceForFolder(IFolderContainer folderContainer, Fi
190188
allElements.addAll(((IFolder)folderContainer).getElements());
191189
for(EObject tmpElement : allElements) {
192190
createAndSaveResource(
193-
new File(folder, tmpElement.getClass().getSimpleName() + "_" + ((IIdentifier)tmpElement).getId() + ".xml"), //$NON-NLS-1$ //$NON-NLS-2$
191+
GraficoFileConventions.forElement(folder, tmpElement),
194192
tmpElement);
195193
}
196194
}
197195
if(folderContainer instanceof IArchimateModel) {
198196
createAndSaveResource(new File(folder, IGraficoConstants.FOLDER_XML), folderContainer);
199197
}
200198
}
201-
202-
/**
203-
* Generate a proper name for directory creation
204-
*
205-
* @param folder
206-
* @return
207-
*/
208-
private String getNameFor(IFolder folder) {
209-
return folder.getType() == FolderType.USER ? folder.getId().toString() : folder.getType().toString();
210-
}
211-
199+
212200
/**
213201
* Save the model to Resource
214202
*

org.archicontribs.modelrepository/src/org/archicontribs/modelrepository/views/history/HistoryTableViewer.java

Lines changed: 40 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@
55
*/
66
package org.archicontribs.modelrepository.views.history;
77

8+
import java.io.File;
89
import java.io.IOException;
10+
import java.nio.file.Path;
911
import java.text.DateFormat;
1012
import java.util.ArrayList;
1113
import java.util.Date;
@@ -14,6 +16,7 @@
1416
import org.archicontribs.modelrepository.IModelRepositoryImages;
1517
import org.archicontribs.modelrepository.grafico.BranchInfo;
1618
import org.archicontribs.modelrepository.grafico.BranchStatus;
19+
import org.archicontribs.modelrepository.grafico.GraficoFileConventions;
1720
import org.archicontribs.modelrepository.grafico.IArchiRepository;
1821
import org.eclipse.jface.layout.TableColumnLayout;
1922
import org.eclipse.jface.viewers.CellLabelProvider;
@@ -30,12 +33,15 @@
3033
import org.eclipse.jgit.lib.Repository;
3134
import org.eclipse.jgit.revwalk.RevCommit;
3235
import org.eclipse.jgit.revwalk.RevWalk;
36+
import org.eclipse.jgit.treewalk.filter.PathFilter;
3337
import org.eclipse.swt.SWT;
3438
import org.eclipse.swt.graphics.Image;
3539
import org.eclipse.swt.widgets.Composite;
3640
import org.eclipse.swt.widgets.Display;
3741

3842
import com.archimatetool.editor.ui.UIUtils;
43+
import com.archimatetool.model.IArchimateModelObject;
44+
import com.archimatetool.model.IFolder;
3945

4046

4147
/**
@@ -119,6 +125,15 @@ public void doSetInput(IArchiRepository archiRepo) {
119125
// setSelection(new StructuredSelection(element), true);
120126
//}
121127
}
128+
129+
private static record HistoryInput(IArchiRepository repo, IArchimateModelObject obj) {}
130+
131+
public void doSetInput(IArchiRepository selectedRepository, Object selected) {
132+
if (selected instanceof IArchimateModelObject)
133+
setInput(new HistoryInput(selectedRepository, (IArchimateModelObject)selected));
134+
else
135+
doSetInput(selectedRepository);
136+
}
122137

123138
public void setSelectedBranch(BranchInfo branchInfo) {
124139
if(branchInfo != null && branchInfo.equals(fSelectedBranch)) {
@@ -155,27 +170,47 @@ List<RevCommit> getCommits(Object parent) {
155170
fLocalCommit = null;
156171
fOriginCommit = null;
157172

158-
if(!(parent instanceof IArchiRepository) || fSelectedBranch == null) {
173+
IArchiRepository repo = null;
174+
File elemFile = null;
175+
176+
if (parent instanceof HistoryInput && ((HistoryInput) parent).obj().eContainer() instanceof IFolder) {
177+
HistoryInput input = (HistoryInput) parent;
178+
repo = input.repo();
179+
IFolder folder = (IFolder) input.obj().eContainer();
180+
elemFile = GraficoFileConventions.forElement(
181+
new File(repo.getLocalRepositoryFolder(), "model"),
182+
folder,
183+
input.obj());
184+
} else if (parent instanceof IArchiRepository)
185+
repo = (IArchiRepository) parent;
186+
187+
if(fSelectedBranch == null) {
159188
return commits;
160189
}
161190

162-
IArchiRepository repo = (IArchiRepository)parent;
163-
164191
// Local Repo was deleted
165-
if(!repo.getLocalRepositoryFolder().exists()) {
192+
if(repo == null || !repo.getLocalRepositoryFolder().exists()) {
166193
return commits;
167194
}
168195

169196
try(Repository repository = Git.open(repo.getLocalRepositoryFolder()).getRepository()) {
170197
// a RevWalk allows to walk over commits based on some filtering that is defined
171198
try(RevWalk revWalk = new RevWalk(repository)) {
199+
if (elemFile != null) {
200+
String elemPath = Path.of(repo.getLocalRepositoryFolder().getAbsolutePath())
201+
.relativize(
202+
Path.of(elemFile.getAbsolutePath())
203+
).toString();
204+
revWalk.setTreeFilter(PathFilter.create(elemPath));
205+
}
206+
172207
// Find the local branch
173208
ObjectId objectID = repository.resolve(fSelectedBranch.getLocalBranchNameFor());
174209
if(objectID != null) {
175210
fLocalCommit = revWalk.parseCommit(objectID);
176211
revWalk.markStart(fLocalCommit);
177212
}
178-
213+
179214
// Find the remote branch
180215
objectID = repository.resolve(fSelectedBranch.getRemoteBranchNameFor());
181216
if(objectID != null) {

0 commit comments

Comments
 (0)