/* * */ package de.urszeidler.shr5.ecp.util; import java.awt.image.BufferedImage; import java.awt.image.DirectColorModel; import java.awt.image.IndexColorModel; import java.awt.image.WritableRaster; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.Notifier; import org.eclipse.emf.common.util.Diagnostic; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.common.util.TreeIterator; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.emf.ecore.xmi.XMIResource; import org.eclipse.emf.ecore.xmi.XMLResource; import org.eclipse.emf.edit.command.CommandParameter; import org.eclipse.emf.edit.domain.EditingDomain; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.PaletteData; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Shell; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.collect.FluentIterable; import de.urszeidler.commons.functors.Predicate; import de.urszeidler.commons.functors.Transformer; import de.urszeidler.eclipse.shr5.AbstraktGegenstand; import de.urszeidler.eclipse.shr5.AbstraktPersona; import de.urszeidler.eclipse.shr5.Beschreibbar; import de.urszeidler.eclipse.shr5.Fertigkeit; import de.urszeidler.eclipse.shr5.FertigkeitsGruppe; import de.urszeidler.eclipse.shr5.Identifiable; import de.urszeidler.eclipse.shr5.KomplexeForm; import de.urszeidler.eclipse.shr5.Lifestyle; import de.urszeidler.eclipse.shr5.MagischeTradition; import de.urszeidler.eclipse.shr5.MartialartStyle; import de.urszeidler.eclipse.shr5.MartialartTechnique; import de.urszeidler.eclipse.shr5.PersonaFertigkeit; import de.urszeidler.eclipse.shr5.PersonaFertigkeitsGruppe; import de.urszeidler.eclipse.shr5.PersonaKomplexForm; import de.urszeidler.eclipse.shr5.PersonaMartialartStyle; import de.urszeidler.eclipse.shr5.PersonaMartialartTechnique; import de.urszeidler.eclipse.shr5.PersonaZauber; import de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.eclipse.shr5.SourceBook; import de.urszeidler.eclipse.shr5.Spezies; import de.urszeidler.eclipse.shr5.Zauber; import de.urszeidler.eclipse.shr5.gameplay.Command; import de.urszeidler.eclipse.shr5.gameplay.GameplayFactory; import de.urszeidler.eclipse.shr5.gameplay.GameplayPackage; import de.urszeidler.eclipse.shr5.gameplay.Probe; import de.urszeidler.eclipse.shr5.gameplay.ProbeState; import de.urszeidler.eclipse.shr5.gameplay.SetFeatureCommand; import de.urszeidler.eclipse.shr5.gameplay.SuccesTest; import de.urszeidler.eclipse.shr5.runtime.RuntimeCharacter; import de.urszeidler.eclipse.shr5.runtime.RuntimeFactory; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5.util.ShadowrunTools; import de.urszeidler.eclipse.shr5.util.Shr5ResourceFactoryImpl; import de.urszeidler.eclipse.shr5Management.AttributeChange; import de.urszeidler.eclipse.shr5Management.LifestyleToStartMoney; import de.urszeidler.eclipse.shr5Management.ManagedCharacter; import de.urszeidler.eclipse.shr5Management.PersonaChange; import de.urszeidler.eclipse.shr5Management.PriorityCategorie; import de.urszeidler.eclipse.shr5Management.Shr5System; import de.urszeidler.eclipse.shr5Management.Shr5managementFactory; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools; import de.urszeidler.emf.commons.ui.dialogs.OwnChooseDialog; import de.urszeidler.shr5.ecp.Activator; import de.urszeidler.shr5.ecp.opener.ECPAttributModifikatorWertOpener; /** * A collection of tool functions. * * @author urs */ public class ShadowrunEditingTools { /** * Transform to the message string. * * @return */ public static Function<Diagnostic, String> diagnosticToStringTransformer() { return new Function<Diagnostic, String>() { @Override public String apply(Diagnostic input) { return input.getMessage(); } }; } /** * from "http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/ConvertsabufferedimagetoSWTImageData.htm" * * @param bufferedImage * @return */ public static ImageData convertToSWT(BufferedImage bufferedImage) { if (bufferedImage.getColorModel() instanceof DirectColorModel) { DirectColorModel colorModel = (DirectColorModel)bufferedImage.getColorModel(); PaletteData palette = new PaletteData(colorModel.getRedMask(), colorModel.getGreenMask(), colorModel.getBlueMask()); ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette); for (int y = 0; y < data.height; y++) { for (int x = 0; x < data.width; x++) { int rgb = bufferedImage.getRGB(x, y); int pixel = palette.getPixel(new RGB((rgb >> 16) & 0xFF, (rgb >> 8) & 0xFF, rgb & 0xFF)); data.setPixel(x, y, pixel); if (colorModel.hasAlpha()) { data.setAlpha(x, y, (rgb >> 24) & 0xFF); } } } return data; } else if (bufferedImage.getColorModel() instanceof IndexColorModel) { IndexColorModel colorModel = (IndexColorModel)bufferedImage.getColorModel(); int size = colorModel.getMapSize(); byte[] reds = new byte[size]; byte[] greens = new byte[size]; byte[] blues = new byte[size]; colorModel.getReds(reds); colorModel.getGreens(greens); colorModel.getBlues(blues); RGB[] rgbs = new RGB[size]; for (int i = 0; i < rgbs.length; i++) { rgbs[i] = new RGB(reds[i] & 0xFF, greens[i] & 0xFF, blues[i] & 0xFF); } PaletteData palette = new PaletteData(rgbs); ImageData data = new ImageData(bufferedImage.getWidth(), bufferedImage.getHeight(), colorModel.getPixelSize(), palette); data.transparentPixel = colorModel.getTransparentPixel(); WritableRaster raster = bufferedImage.getRaster(); int[] pixelArray = new int[1]; for (int y = 0; y < data.height; y++) { for (int x = 0; x < data.width; x++) { raster.getPixel(x, y, pixelArray); data.setPixel(x, y, pixelArray[0]); } } return data; } return null; } /** * @param choosenLifestyle * @param lifestyleToStartMoney * @return */ public static LifestyleToStartMoney getLifestyleToMoney(Lifestyle choosenLifestyle, EList<LifestyleToStartMoney> lifestyleToStartMoney) { for (LifestyleToStartMoney lstsm : lifestyleToStartMoney) { EList<Lifestyle> lifeStyles = lstsm.getLifeStyles(); for (Lifestyle lifestyle : lifeStyles) { String id = getId(lifestyle); if (id != null && id.equals(choosenLifestyle.getParentId())) return lstsm; if (lifestyle.getName().equals(choosenLifestyle.getName())) return lstsm; } } return null; } /** * Get the id from the object or null. * * @param eObject * @return */ public static String getId(EObject eObject) { if (eObject.eResource() instanceof XMLResource) { XMLResource xmlRes = (XMLResource)eObject.eResource(); String id = xmlRes.getID(eObject); return id; } return null; } /** * Creates a transformer to make a copy of the input objects. * * @return the transformer */ public static Transformer<EObject, EObject> copyTransformer() { Transformer<EObject, EObject> transformer = new Transformer<EObject, EObject>() { @Override public EObject transform(EObject input) { EObject copy = EcoreUtil.copy(input); return copy; } }; return transformer; } /** * Creates a transformer to make a {@link Zauber} object to a {@link PersonaZauber} object referencing the spell. * * @return the transformer */ public static Transformer<Zauber, PersonaZauber> zauber2PersonaZauberTransformer() { Transformer<Zauber, PersonaZauber> transformer = new Transformer<Zauber, PersonaZauber>() { @Override public PersonaZauber transform(Zauber input) { PersonaZauber personaZauber = Shr5Factory.eINSTANCE.createPersonaZauber(); personaZauber.setFormel(input); personaZauber.setStufe(1); return personaZauber; } }; return transformer; } // TODO : these methods belong to the shadowrunManagementTools /** * Set the persona fertigkeit to the value by applying a persona change. It clears the persona fertigkeit and the advancement is set to 0. * * @param character * @param fertigkeit * @param value */ public static void changeFertigkeitByAdvacement(ManagedCharacter character, Fertigkeit fertigkeit, Integer value) { final AbstraktPersona persona = character.getPersona(); PersonaFertigkeit personaFertigkeit = ShadowrunTools.findFertigkeit(fertigkeit, persona); if (personaFertigkeit == null) { PersonaFertigkeit pf = ShadowrunEditingTools.fertigkeit2PersonafertigkeitTransformer(character).transform(fertigkeit); PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); character.getChanges().add(personaChange); personaChange.setChangeable(pf); // personaChange.setFrom(0); personaChange.setTo((Integer)value); personaChange.applyChanges(); } else { if ((Integer)value == 0) { persona.getFertigkeiten().remove(personaFertigkeit); PersonaChange advacements = ShadowrunManagmentTools.findCharacterAdvacements(character, personaFertigkeit); if (advacements != null) character.getChanges().remove(advacements); } else { PersonaChange advacements = ShadowrunManagmentTools.findCharacterAdvacements(character, personaFertigkeit); if (advacements != null) { advacements.setTo(Math.max(advacements.getFrom(), (Integer)value)); advacements.applyChanges(); persona.eNotify(new ENotificationImpl((InternalEObject)persona, Notification.SET, Shr5Package.Literals.ABSTRAKT_PERSONA__FERTIGKEITEN, null, null)); } else if (advacements == null) { PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); character.getChanges().add(personaChange); personaChange.setChangeable(personaFertigkeit); personaChange.setTo((Integer)value); personaChange.applyChanges(); } } } } /** * Set the persona fertigkeit to the value by applying a persona change. It clears the persona fertigkeit and the advancement is set to 0. * * @param character * @param fertigkeitsGruppe * @param value * @deprecated use de.urszeidler.eclipse.shr5Management.util.ShadowrunManagmentTools#changeAttributeByAdvacement(ManagedCharacter, EAttribute, * Integer) */ @Deprecated() public static void changeAttributeByAdvacement(ManagedCharacter character, EAttribute attribute, Integer value) { final AbstraktPersona persona = character.getPersona(); EAttribute speciesMin = ShadowrunTools.base2SpeciesMin(attribute); Spezies spezies = persona.getSpezies(); if (spezies == null) return; Integer eGet = (Integer)spezies.eGet(speciesMin); if (value < eGet) value = eGet; AttributeChange attributeChange = ShadowrunManagmentTools.findCharacterAdvacements(character, attribute); if (attributeChange == null) { attributeChange = Shr5managementFactory.eINSTANCE.createAttributeChange(); character.getChanges().add(attributeChange); attributeChange.setAttibute(attribute); // attributeChange.setFrom((Integer)eGet); attributeChange.setTo(value); attributeChange.applyChanges(); persona.eNotify(new ENotificationImpl((InternalEObject)persona, Notification.SET, attribute, eGet, value)); } else if (eGet == value) { character.getChanges().remove(attributeChange); persona.eSet(attribute, eGet); } else { attributeChange.setTo(Math.max(attributeChange.getFrom(), (Integer)value)); attributeChange.applyChanges(); persona.eNotify(new ENotificationImpl((InternalEObject)persona, Notification.SET, attribute, eGet, value)); } } /** * Set the persona fertigkeit to the value by applying a persona change. It clears the persona fertigkeit and the advancement is set to 0. * * @param character * @param fertigkeitsGruppe * @param value */ public static void changeFertigkeitsGruppeByAdvacement(ManagedCharacter character, FertigkeitsGruppe fertigkeitsGruppe, Integer value) { final AbstraktPersona persona = character.getPersona(); PersonaFertigkeitsGruppe personaFertigkeitsGruppe = ShadowrunTools.findGruppe(fertigkeitsGruppe, persona); if (personaFertigkeitsGruppe == null) { PersonaFertigkeitsGruppe pf = ShadowrunEditingTools.fertigkeitsGruppe2PersonafertigkeitsGruppeTransformer(character).transform( fertigkeitsGruppe); PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); character.getChanges().add(personaChange); personaChange.setChangeable(pf); personaChange.setFrom(0); personaChange.setTo((Integer)value); personaChange.applyChanges(); } else { if ((Integer)value == 0) { persona.getFertigkeitsGruppen().remove(personaFertigkeitsGruppe); PersonaChange advacements = ShadowrunManagmentTools.findCharacterAdvacements(character, personaFertigkeitsGruppe); if (advacements != null) character.getChanges().remove(advacements); } else { PersonaChange advacements = ShadowrunManagmentTools.findCharacterAdvacements(character, personaFertigkeitsGruppe); if (advacements != null) { advacements.setTo(Math.max(advacements.getFrom(), (Integer)value)); advacements.applyChanges(); persona.eNotify(new ENotificationImpl((InternalEObject)persona, Notification.SET, Shr5Package.Literals.ABSTRAKT_PERSONA__FERTIGKEITEN, null, null)); } else if (advacements == null) { PersonaChange personaChange = Shr5managementFactory.eINSTANCE.createPersonaChange(); character.getChanges().add(personaChange); personaChange.setChangeable(personaFertigkeitsGruppe); personaChange.setTo((Integer)value); personaChange.applyChanges(); } } } } // TODO : move the transformer to the ShadowrunTools /** * Creates a transformer to make a {@link Fertigkeit} object to a {@link PersonaFertigkeit} object referencing the {@link Fertigkeit}. It creates * the {@link PersonaFertigkeit} or returns the found one. * * @return the transformer */ public static Transformer<Fertigkeit, PersonaFertigkeit> fertigkeit2PersonafertigkeitTransformer(final ManagedCharacter character) { final AbstraktPersona persona = character.getPersona(); return fertigkeit2PersonafertigkeitTransformer(persona); } /** * Creates a transformer to make a {@link Fertigkeit} object to a {@link PersonaFertigkeit} object referencing the {@link Fertigkeit}. It creates * the {@link PersonaFertigkeit} or returns the found one. * * @return the transformer */ public static Transformer<Fertigkeit, PersonaFertigkeit> fertigkeit2PersonafertigkeitTransformer(final AbstraktPersona persona) { Transformer<Fertigkeit, PersonaFertigkeit> transformer = new Transformer<Fertigkeit, PersonaFertigkeit>() { @Override public PersonaFertigkeit transform(Fertigkeit input) { PersonaFertigkeit fertigkeit = ShadowrunTools.findFertigkeit(input, persona); if (fertigkeit == null) { fertigkeit = Shr5Factory.eINSTANCE.createPersonaFertigkeit(); fertigkeit.setFertigkeit(input); } return fertigkeit; } }; return transformer; } /** * Creates a transformer to make a {@link FertigkeitsGruppe} object to a {@link PersonaFertigkeitsGruppe} object referencing the * {@link FertigkeitsGruppe}. It creates * a new one or returns the one existing. * * @return the transformer */ public static Transformer<FertigkeitsGruppe, PersonaFertigkeitsGruppe> fertigkeitsGruppe2PersonafertigkeitsGruppeTransformer( final ManagedCharacter character) { final AbstraktPersona persona = character.getPersona(); return fertigkeitsGruppe2PersonafertigkeitsGruppeTransformer(persona); } /** * Creates a transformer to make a {@link FertigkeitsGruppe} object to a {@link PersonaFertigkeitsGruppe} object referencing the spell. It creates * a new one or returns the one existing. * * @return the transformer */ public static Transformer<FertigkeitsGruppe, PersonaFertigkeitsGruppe> fertigkeitsGruppe2PersonafertigkeitsGruppeTransformer( final AbstraktPersona persona) { Transformer<FertigkeitsGruppe, PersonaFertigkeitsGruppe> transformer = new Transformer<FertigkeitsGruppe, PersonaFertigkeitsGruppe>() { @Override public PersonaFertigkeitsGruppe transform(FertigkeitsGruppe input) { PersonaFertigkeitsGruppe gruppe = ShadowrunTools.findGruppe(input, persona); if (gruppe == null) { gruppe = Shr5Factory.eINSTANCE.createPersonaFertigkeitsGruppe(); gruppe.setGruppe(input); } return gruppe; } }; return transformer; } /** * Creates a transformer to make a {@link KomplexeForm} object to a {@link PersonaKomplexForm} object referencing the spell. * * @return the transformer */ public static Transformer<KomplexeForm, PersonaKomplexForm> complexForm2PersonaComplexFormTransformer() { Transformer<KomplexeForm, PersonaKomplexForm> transformer = new Transformer<KomplexeForm, PersonaKomplexForm>() { @Override public PersonaKomplexForm transform(KomplexeForm input) { PersonaKomplexForm komplexForm = Shr5Factory.eINSTANCE.createPersonaKomplexForm(); komplexForm.setStufe(1); komplexForm.setForm(input); return komplexForm; } }; return transformer; } /** * Create a float string from an int with base 100. * * @param essenz * @return */ public static String powerPointsToFloat(int essenz) { return essenzToFloat(essenz); } /** * Lookup a skill from the reource set by name. * * @param sb * @return */ public static String findObject(final String sb) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (sb != null) if (input instanceof Beschreibbar) { if (sb.equals(((Beschreibbar)input).getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) return getId(iterator.next()); return ""; } /** * Lookup a skill from the reource set by name. * * @param sb * @return */ public static String findTradition(final String sb) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (sb != null) if (input instanceof MagischeTradition) { if (sb.equals(((MagischeTradition)input).getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) return getId(iterator.next()); return ""; } /** * Lookup a skill from the reource set by name. * * @param sb * @return */ public static String findSkill(final String sb) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (sb != null) if (input instanceof Fertigkeit) { if (sb.equals(((Fertigkeit)input).getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) return getId(iterator.next()); return ""; } public static String findSkillGroup(final String sb) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (sb != null) if (input instanceof FertigkeitsGruppe) { if (sb.equals(((FertigkeitsGruppe)input).getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) return getId(iterator.next()); return ""; } public static String findSpecies(final String sb) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (sb != null) if (input instanceof Spezies) { if (sb.equals(((Spezies)input).getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) return getId(iterator.next()); return ""; } public static String findSourceBook(final String sb) { if ("SR5".equals(sb)) return "f5ec713c-98cd-41f6-a0a4-4a8eaed55b66"; EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (sb != null) if (input instanceof SourceBook) { if (sb.equals(((SourceBook)input).getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) return getId(iterator.next()); return ""; } public static String findPersonaType(String adept, String magician, String technomancer) { if ("true".equals(adept.toLowerCase()) && "true".equals(magician.toLowerCase())) return "shr5:" + Shr5Package.Literals.MYSTIC_ADEPT.getName(); if ("true".equals(adept.toLowerCase())) return "shr5:" + Shr5Package.Literals.KI_ADEPT.getName(); if ("true".equals(magician.toLowerCase())) return "shr5:" + Shr5Package.Literals.MAGIER.getName(); return "shr5:" + Shr5Package.Literals.MUDAN_PERSONA.getName(); } public static String findPriority(final String priorityName, final String systemName, String categoryName) { final EClass eclass; if ("resources".equals(categoryName)) eclass = Shr5managementPackage.Literals.RESOURCEN; else if ("metatype".equals(categoryName)) eclass = Shr5managementPackage.Literals.META_TYPE; else if ("skills".equals(categoryName)) eclass = Shr5managementPackage.Literals.SKILL; else if ("attributes".equals(categoryName)) eclass = Shr5managementPackage.Literals.ATTRIBUTES; else if ("magic".equals(categoryName)) eclass = Shr5managementPackage.Literals.SPELLCASTER; else eclass = Shr5managementPackage.Literals.RESOURCEN; EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (systemName != null) if (input instanceof Shr5System) { if (systemName.equals(((Shr5System)input).getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) { Shr5System eObject = (Shr5System)iterator.next(); Optional<PriorityCategorie> firstMatch = FluentIterable.from(eObject.getPriorities()).firstMatch( new com.google.common.base.Predicate<PriorityCategorie>() { @Override public boolean apply(PriorityCategorie input) { return input.eClass().equals(eclass) && priorityName.substring(0, 1).equals(input.getCategorieName()); } }); if (firstMatch.isPresent()) return getId(firstMatch.get()); } // return getId(iterator.next()); return ""; } /** * Copies the object with the id or the name and serialize it as xml. * * @param name * @param id * @param nodeName * @return */ public static String copyObject(final String name, final String id, final String nodeName) { EditingDomain editingDomain = Activator.getDefault().getEdtingDomain(); Collection<EObject> filteredObject = ShadowrunEditingTools.findAllObjects(editingDomain, new Predicate<Object>() { @Override public boolean evaluate(Object input) { if (name != null) if (input instanceof Beschreibbar) { Beschreibbar input2 = (Beschreibbar)input; if ("inventar".equals(nodeName)) if (!(input2 instanceof AbstraktGegenstand)) return false; if (getId(input2).equals(id)) return true; if (name.equals(input2.getName())) return true; } return false; } }); Iterator<EObject> iterator = filteredObject.iterator(); if (iterator.hasNext()) { EObject eobject = iterator.next(); Map<Object, Object> options = new HashMap<Object, Object>(); // options.put(XMIResource.OPTION_SUPPRESS_XMI, true); options.put(XMIResource.NO_NAMESPACE_SCHEMA_LOCATION, true); options.put(XMIResource.OPTION_ENCODING, "UTF-8"); options.put(XMIResource.OPTION_SCHEMA_LOCATION, false); options.put(XMIResource.OPTION_DECLARE_XML, false); options.put(XMIResource.SCHEMA_LOCATION, false); EObject copyWithParentId = copyWithParentId(eobject); try { String type = copyWithParentId.eClass().getName(); final Shr5ResourceFactoryImpl resourceSet = new Shr5ResourceFactoryImpl(); final XMIResource resource = (XMIResource)resourceSet.createResource(URI.createURI("http:///My.xml")); resource.getContents().add(copyWithParentId); StringWriter out = new StringWriter(); resource.save(out, options); return out.toString() // .replaceFirst("^<.* xmlns:shr5=\"http://urszeidler.de/shr5/1.0\"", "\n<" + nodeName + " xsi:type=\"shr5:" + type + "\" ") .replaceAll("</shr5:.*>", "</" + nodeName + ">"); } catch (final IOException e) { } } return ""; } /** * Creates a copy of the eobject, when it is an {@link Identifiable} the parent id will be set to the id of the org object when the org object has * no parentId set. So the copied object has the org id as parentId or the parentId. * * @param eo the org {@link EObject} * @return the copy */ public static EObject copyWithParentId(EObject eo) { EObject copy = EcoreUtil.copy(eo); if (eo.eResource() instanceof XMLResource) { XMLResource xmlRes = (XMLResource)eo.eResource(); String id = xmlRes.getID(eo); if (copy instanceof Identifiable) { String parentId = ((Identifiable)eo).getParentId(); if (parentId != null && !parentId.isEmpty()) id = parentId; Identifiable iden = (Identifiable)copy; iden.setParentId(id); } } return copy; } /** * Create a float string from an int with base 100. * * @param essenz * @return */ public static String essenzToFloat(int essenz) { return ShadowrunTools.essenzToFloat(essenz); } /** * Extract the eclasses from acceptable for a feature in the contex of the object. * * @param eobject * @param feature * @param editingDomain * @return the collection of eclasses accapable for the given feauture */ public static Collection<EClass> provideNewClassTypes(EObject eobject, EStructuralFeature feature, EditingDomain editingDomain) { Collection<EClass> filteredEClasses = new HashSet<EClass>(); Collection<?> newChildDescriptors = AdapterFactoryUtil.getInstance().getItemDelegator().getNewChildDescriptors(eobject, editingDomain, null); for (Object object2 : newChildDescriptors) { if (object2 instanceof CommandParameter) { CommandParameter cp = (CommandParameter)object2; if (cp.feature.equals(feature)) filteredEClasses.add(((EObject)cp.value).eClass()); } } return filteredEClasses; } /** * Find all objects matching the predicate. * * @param editingDomain * @param predicate * @return */ public static List<EObject> findAllObjects(EditingDomain editingDomain, Predicate<Object> predicate) { ArrayList<EObject> list = new ArrayList<EObject>(); TreeIterator<Notifier> allContents = editingDomain.getResourceSet().getAllContents(); while (allContents.hasNext()) { Notifier obj = allContents.next(); if (predicate.evaluate(obj)) list.add((EObject)obj); } return list; } /** * Open the editor for the first object in the selection. * * @param selection */ public static void openEditorForFirstSelection(ISelection selection) { EObject eo = null; eo = extractFirstEObject(selection); if (eo != null) openEObject(eo); } /** * Extract the first eobject from the selection or null. * * @param selection * @return */ public static EObject extractFirstEObject(ISelection selection) { if (selection instanceof IStructuredSelection) { IStructuredSelection is = (IStructuredSelection)selection; Object firstElement = is.getFirstElement(); if (firstElement instanceof EObject) { return (EObject)firstElement; } } return null; } public static void openEObject(EObject eo) { ECPAttributModifikatorWertOpener.openEditor(eo, Activator.getDefault().getDefaultEcpProject()); } public static Transformer<ManagedCharacter, RuntimeCharacter> managedCharacter2RuntimeTransformer() { return new Transformer<ManagedCharacter, RuntimeCharacter>() { @Override public RuntimeCharacter transform(ManagedCharacter input) { RuntimeCharacter runtimeCharacter = RuntimeFactory.eINSTANCE.createRuntimeCharacter(); runtimeCharacter.setCharacter(input); return runtimeCharacter; } }; } public static Function<ManagedCharacter, RuntimeCharacter> managedCharacter2RuntimeFunction() { return new Function<ManagedCharacter, RuntimeCharacter>() { @Override public RuntimeCharacter apply(ManagedCharacter input) { RuntimeCharacter runtimeCharacter = RuntimeFactory.eINSTANCE.createRuntimeCharacter(); runtimeCharacter.setCharacter(input); return runtimeCharacter; } }; } public static String command2String(Command cmd) { if (cmd instanceof SuccesTest) { SuccesTest st = (SuccesTest)cmd;// ([su]|[gl])/[lim]([nh]/[th])[dp][probe]x String state = ""; if (st.getProbeState() != ProbeState.CRITICAL_GLITCH) state = toEEnumName(st.getTestState(), st, GameplayPackage.Literals.SUCCES_TEST__TEST_STATE) + "|" + toEEnumName(st.getProbeState(), st, GameplayPackage.Literals.PROBE__PROBE_STATE); else state = toEEnumName(st.getProbeState(), st, GameplayPackage.Literals.PROBE__PROBE_STATE); return String.format("[%s](%s/%s|%s)(%s/%s)%s%s", state, st.getSuccesses(), st.getLimit(), st.getGlitches(), st.getNetHits(), st.getThresholds(), st.getProbe().size(), st.getProbe().toString()); } else if (cmd instanceof Probe) { String state = ""; Probe st = (Probe)cmd;// ([su]|[gl])/[lim]|[dp][probe] state = toEEnumName(st.getProbeState(), st, GameplayPackage.Literals.PROBE__PROBE_STATE); return String.format("[%s](%s/%s|%s)%s%s", state, st.getSuccesses(), st.getLimit(), st.getGlitches(), st.getProbe().size(), st.getProbe() .toString()); } return ""; } public static String toEEnumName(Object literal, EObject eobject, EAttribute feature) { if (literal == null) return ""; String text2 = literal.toString(); IItemPropertyDescriptor propertyDescriptor = AdapterFactoryUtil.getInstance().getItemDelegator().getPropertyDescriptor(eobject, feature); if (propertyDescriptor != null) text2 = propertyDescriptor.getLabelProvider(eobject).getText(literal); return text2; } public static SetFeatureCommand changeItem(RuntimeCharacter subject, EReference references, Shell shell) { EObject object = null; IItemPropertyDescriptor propertyDescriptor = AdapterFactoryUtil.getInstance().getItemDelegator().getPropertyDescriptor(subject, references); List<?> values = (List<?>)propertyDescriptor.getChoiceOfValues(subject); OwnChooseDialog dialog = new OwnChooseDialog(shell, values.toArray(new Object[]{}), "Change item", "Select the item you want to choose."); dialog.setLabelProvider(AdapterFactoryUtil.getInstance().getLabelProvider()); int open = dialog.open(); if (open == Dialog.OK) { Object[] result = dialog.getResult(); if (result.length > 0) { object = (EObject)result[0]; } } if (object == null) return null; SetFeatureCommand setFeatureCommand = GameplayFactory.eINSTANCE.createSetFeatureCommand(); setFeatureCommand.setObject(subject); setFeatureCommand.setFeature(references); setFeatureCommand.setValue(object); return setFeatureCommand; } /** * Transform the eobjects to the label provider names. * * @return */ public static Function<EObject, String> eObject2StringTransformer() { return new Function<EObject, String>() { @Override public String apply(EObject input) { return AdapterFactoryUtil.getInstance().getLabelProvider().getText(input); } }; } /** * Returns the localized feature name. * * @param object * @param eAttribute * @return */ public static String toFeatureName(EObject object, EStructuralFeature eAttribute) { IItemPropertyDescriptor descriptor = AdapterFactoryUtil.getInstance().getItemDelegator().getPropertyDescriptor(object, eAttribute); if (descriptor == null) return AdapterFactoryUtil.getInstance().getItemDelegator().getText(eAttribute); return descriptor.getDisplayName(eAttribute); } public static Transformer<MartialartStyle, PersonaMartialartStyle> martialArt2PersonaMartialArtTransformer() { return new Transformer<MartialartStyle, PersonaMartialartStyle>() { @Override public PersonaMartialartStyle transform(MartialartStyle input) { PersonaMartialartStyle style = Shr5Factory.eINSTANCE.createPersonaMartialartStyle(); style.setStyle(input); return style; } }; } public static Transformer<MartialartTechnique, PersonaMartialartTechnique> martialArtTechnique2PersonaMartialArtTransformer() { return new Transformer<MartialartTechnique, PersonaMartialartTechnique>() { @Override public PersonaMartialartTechnique transform(MartialartTechnique input) { PersonaMartialartTechnique technique = Shr5Factory.eINSTANCE.createPersonaMartialartTechnique(); technique.setTechnique(input); return technique; } }; } }