use of org.eclipse.pde.internal.ua.core.ctxhelp.text.CtxHelpContext in project dsl-devkit by dsldevkit.
the class CheckContextsGenerator method createContextForCheck.
/**
* Creates a context for every check.
*
* @param factory
* the model factory
* @param check
* the check
* @return the new help context
*/
private CtxHelpContext createContextForCheck(final CtxHelpDocumentFactory factory, final Check check) {
CtxHelpContext context = factory.createContext();
context.setID(generatorNaming.getContextId(check));
CtxHelpTopic topic = factory.createTopic();
topic.setLabel(check.getLabel());
Path contextFilePath = new Path("docs/content/" + EcoreUtil2.getContainerOfType(check, CheckCatalog.class).getName() + ".html");
topic.setXMLAttribute(ICtxHelpConstants.ATTRIBUTE_HREF, contextFilePath.toPortableString() + '#' + generatorNaming.getContextId(check));
context.addChild(topic);
return context;
}
use of org.eclipse.pde.internal.ua.core.ctxhelp.text.CtxHelpContext in project dsl-devkit by dsldevkit.
the class CheckContextsGenerator method updateContextsFile.
/**
* Update contexts file.
*
* @param uri
* the uri to the current catalog
* @param buildContext
* the context
* @throws CoreException
* the core exception
*/
public void updateContextsFile(final URI uri, final IBuildContext buildContext) throws CoreException {
IFile file = projectHelper.getHelpFile(uri, CheckContextsExtensionHelper.CONTEXTS_FILE_NAME);
CtxHelpModel model = new CtxHelpModel(CoreUtility.getTextDocument(file.getContents()), false);
model.setUnderlyingResource(file);
model.load();
CtxHelpRoot root = model.getCtxHelpRoot();
CtxHelpDocumentFactory factory = model.getFactory();
Iterable<CtxHelpContext> contexts = Iterables.filter(model.getCtxHelpRoot().getChildren(), CtxHelpContext.class);
// all context ids belonging to the catalog
Set<String> ids = Sets.newHashSet();
String contextIdPrefix = projectHelper.getCatalog(buildContext, uri).getName().toLowerCase() + "_";
for (CtxHelpContext context : contexts) {
if (context.getId().startsWith(contextIdPrefix)) {
ids.add(context.getId());
}
}
Set<String> checkIds = Sets.newHashSet();
// Add context for all checks which have been added
for (Check check : projectHelper.getCatalog(buildContext, uri).getAllChecks()) {
if (!ids.contains(generatorNaming.getContextId(check))) {
root.addChild(createContextForCheck(factory, check));
}
// all contextIds constructed of the checks of the catalog
checkIds.add(generatorNaming.getContextId(check));
}
// Remove context for checks which have been deleted.
for (String id : ids) {
if (!checkIds.contains(id)) {
for (CtxHelpContext context : contexts) {
if (context.getId().equals(id)) {
root.removeChild(context);
}
}
}
}
sortAllContexts(model);
model.save();
model.dispose();
}
use of org.eclipse.pde.internal.ua.core.ctxhelp.text.CtxHelpContext in project dsl-devkit by dsldevkit.
the class CheckContextsGenerator method sortAllContexts.
/**
* This method sorts all contexts alphabetically so that the file always gets generated in the same order.
*
* @param model
* context model
*/
private void sortAllContexts(final CtxHelpModel model) {
Ordering<CtxHelpContext> ordering = Ordering.from((a, b) -> ComparisonChain.start().compare(a.getId(), b.getId()).result());
List<CtxHelpContext> allContexts = Lists.newArrayList(Iterables.filter(model.getCtxHelpRoot().getChildren(), CtxHelpContext.class));
List<CtxHelpContext> expectedContexts = ordering.sortedCopy(allContexts);
CtxHelpRoot root = model.getCtxHelpRoot();
if (!expectedContexts.equals(allContexts)) {
for (int i = 0; i < expectedContexts.size(); i++) {
CtxHelpContext expected = expectedContexts.get(i);
CtxHelpContext actual = allContexts.get(i);
if (!actual.getId().equals(expected.getId())) {
root.swap(actual, expected);
allContexts.set(allContexts.indexOf(expected), actual);
allContexts.set(i, expected);
}
}
}
}
use of org.eclipse.pde.internal.ua.core.ctxhelp.text.CtxHelpContext in project dsl-devkit by dsldevkit.
the class CheckContextsGenerator method removeContexts.
/**
* Removes the contexts for all checks of a deleted catalog.
*
* @param delta
* the delta
* @throws CoreException
* the core exception
*/
@SuppressWarnings("unchecked")
public void removeContexts(final Delta delta) throws CoreException {
final IProject project = RuntimeProjectUtil.getProject(delta.getUri(), mapper);
if (project != null) {
IFile file = projectHelper.getHelpFile(project, CheckContextsExtensionHelper.CONTEXTS_FILE_NAME);
CtxHelpModel model = new CtxHelpModel(CoreUtility.getTextDocument(file.getContents()), false);
model.setUnderlyingResource(file);
model.load();
CtxHelpRoot root = model.getCtxHelpRoot();
Iterable<CtxHelpContext> contexts = Iterables.filter(Lists.newArrayList(root.getChildren()), CtxHelpContext.class);
for (CtxHelpContext context : contexts) {
Iterable<IEObjectDescription> catalogs = delta.getOld().getExportedObjectsByType(CheckPackage.Literals.CHECK_CATALOG);
for (IEObjectDescription catalog : catalogs) {
if (context.getId().startsWith(catalog.getName().getLastSegment().toLowerCase() + "_")) {
root.removeChild(context);
}
}
}
model.save();
model.dispose();
}
}
Aggregations