/** * */ package de.urszeidler.shr5.acceleo.util; import java.io.ByteArrayOutputStream; import java.math.BigDecimal; import java.text.CharacterIterator; import java.text.DateFormat; import java.text.StringCharacterIterator; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map.Entry; import java.util.Set; import org.apache.commons.codec.binary.Base64; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.edit.provider.IItemPropertyDescriptor; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; import de.urszeidler.eclipse.shr5.AbstraktPersona; import de.urszeidler.eclipse.shr5.AstraleProjektion; import de.urszeidler.eclipse.shr5.Beschreibbar; import de.urszeidler.eclipse.shr5.Feuerwaffe; import de.urszeidler.eclipse.shr5.KomplexeForm; import de.urszeidler.eclipse.shr5.ModSetter; import de.urszeidler.eclipse.shr5.Shr5Factory; import de.urszeidler.eclipse.shr5.Shr5Package; import de.urszeidler.eclipse.shr5.Zauber; import de.urszeidler.eclipse.shr5.provider.Shr5EditPlugin; import de.urszeidler.eclipse.shr5.util.AdapterFactoryUtil; import de.urszeidler.eclipse.shr5Management.NonPlayerCharacter; import de.urszeidler.eclipse.shr5Management.Shr5managementFactory; import de.urszeidler.eclipse.shr5Management.Shr5managementPackage; import de.urszeidler.eclipse.shr5Management.provider.Shr5ManagementEditPlugin; import de.urszeidler.shr5.ecp.util.SimpleNameLabelProvider; /** * @author urs */ public class ShadowrunTextTools { private static final String EMPTY = ""; private static Zauber zauber = Shr5Factory.eINSTANCE.createZauber(); private static KomplexeForm komplexForm = Shr5Factory.eINSTANCE.createKomplexeForm(); private static NonPlayerCharacter character = Shr5managementFactory.eINSTANCE.createNonPlayerCharacter(); private static Feuerwaffe fiereweapon = Shr5Factory.eINSTANCE.createFeuerwaffe(); private static DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT); private static DateFormat dateTimeFormat = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT); private static DateFormat dateTimeFormatSec = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG); private static LabelProvider simpleLabelProvider = new SimpleNameLabelProvider(); public static String getSimpleText(Object element) { return simpleLabelProvider.getText(element); } /** * 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); return descriptor.getDisplayName(eAttribute); } public static String getObjectText(Object element) { return AdapterFactoryUtil.getInstance().getLabelProvider().getText(element); } public static String getImageBase64(Object element) { if (element instanceof Beschreibbar) { Beschreibbar b = (Beschreibbar)element; Image imageScaledBy = AdapterFactoryUtil.getInstance().getImageScaledBy(64f, b.getImage()); ImageLoader imageLoader = new ImageLoader(); imageLoader.data = new ImageData[] {imageScaledBy.getImageData()}; ByteArrayOutputStream stream = new ByteArrayOutputStream(500); imageLoader.save(stream,SWT.IMAGE_PNG); String encodeBase64String = Base64.encodeBase64String(stream.toByteArray()); return "data:image/png;base64,"+encodeBase64String; } return null; } /** * To name for the enum literals. * * @param literal * @param eobject * @param feature * @return */ /** * Print all the modifications active on this persona. * * @param persona * @return */ public static List<List<Object>> getModList(AbstraktPersona persona) { ModSetter modManager = persona.getModManager(); Set<Entry<EObject, Integer>> set = modManager.getModificatorMap().entrySet(); ArrayList<List<Object>> list = new ArrayList<List<Object>>(set.size()); for (Entry<EObject, Integer> entry : set) { ArrayList<Object> arrayList = new ArrayList<Object>(2); arrayList.add(entry.getKey()); arrayList.add(entry.getValue()); list.add(arrayList); } return list; } public static String toName(Object literal, EObject eobject, EAttribute feature) { if (literal == null) return EMPTY; String text2 = literal.toString(); IItemPropertyDescriptor propertyDescriptor = AdapterFactoryUtil.getInstance().getItemDelegator().getPropertyDescriptor(eobject, feature); if (propertyDescriptor != null) text2 = propertyDescriptor.getLabelProvider(eobject).getText(literal); return text2; } /** * To name for the enum literals. * * @param literal * @return the localized name */ public static String zauberArtToName(Object literal) { return toName(literal, zauber, Shr5Package.Literals.ZAUBER__ART); } public static String zauberReichweiteToName(Object literal) { return toName(literal, zauber, Shr5Package.Literals.ZAUBER__REICHWEITE); } public static String zauberDauerToName(Object literal) { return toName(literal, zauber, Shr5Package.Literals.ZAUBER__DAUER); } public static String komplexformDauerToName(Object literal) { return toName(literal, komplexForm, Shr5Package.Literals.KOMPLEXE_FORM__DAUER); } public static String komplexformSchwundToName(Object literal) { return toName(literal, komplexForm, Shr5Package.Literals.KOMPLEXE_FORM__SCHWUND); } public static String komplexformZielToName(Object literal) { return toName(literal, komplexForm, Shr5Package.Literals.KOMPLEXE_FORM__ZIEL); } public static String sexToName(Object literal) { return toName(literal, character, Shr5managementPackage.Literals.MANAGED_CHARACTER__SEX); } public static String fwModusToName(Object literal) { return toName(literal, fiereweapon, Shr5Package.Literals.FEUERWAFFE__MODIE); } public static String fwMagazinToName(Object literal) { return toName(literal, fiereweapon, Shr5Package.Literals.FEUERWAFFE__MUNITIONSTYP); } /** * Creates a list of string with the numbers from 1 to count. * * @param count * @return */ public static List<String> createNumberList(Integer count) { ArrayList<String> list = new ArrayList<String>(count); for (int i = 1; i <= count + 1; i++) { list.add(i + EMPTY); } return list; } public static String formatMoney(BigDecimal decimal) { return String.format("%,.0f %s" , decimal, "¥");//TODO: need to use the prefs when able } public static String formatDate(Date date) { if(date==null) return "unset"; return dateFormat.format(date); } public static String formatDateTime(Date date) { if(date==null) return "unset"; return dateTimeFormat.format(date); } public static String formatDateTimeSec(Date date) { if(date==null) return "unset"; return dateTimeFormatSec.format(date); } /** * Get a localized text from the managenent plugin with the prefix _PR_. * * @param string * @return */ public static String localizedString(String string) { try { String loc = Shr5EditPlugin.INSTANCE.getString(string, true); return loc; } catch (Exception e) { try { String loc = Shr5ManagementEditPlugin.INSTANCE.getString(string, true); return loc; } catch (Exception e2) { return string; } } } /** * Looksup the initiative as localized string. * * @param persona * @return */ public static String toLocalizedInitative(AbstraktPersona persona) { if (persona == null) return EMPTY; int initative = persona.getInitative(); int initativWuerfel = persona.getInitativWuerfel(); Object[] arr = new Object[]{ initative, initativWuerfel }; return Shr5ManagementEditPlugin.INSTANCE.getString("_UI_Initative_Format_String", arr, true); } /** * Looksup the initiative as localized string. * @param initative * @param initativWuerfel * * @param persona * @return */ public static String toLocalizedInitative(Integer initative, Integer initativWuerfel) { if(initative==null||initativWuerfel==null) return EMPTY; Object[] arr = new Object[]{ initative, initativWuerfel }; return Shr5ManagementEditPlugin.INSTANCE.getString("_UI_Initative_Format_String", arr, true); } /** * Looksup the initiative as localized string. * * @param persona * @return */ public static String toLocalizedAstralInitative(AstraleProjektion persona) { if (persona == null) return EMPTY; int initative = persona.getAstraleInitative(); int initativWuerfel = persona.getAstraleInitativWuerfel(); Object[] arr = new Object[]{ initative, initativWuerfel }; return Shr5ManagementEditPlugin.INSTANCE.getString("_UI_Initative_Format_String", arr, true); } /** * Really simple escape function. * * @param s * @return */ public static String escapeXML(String s) { StringBuilder result = new StringBuilder(); StringCharacterIterator i = new StringCharacterIterator(s); char c = i.current(); while (c != CharacterIterator.DONE) { switch (c) { case '<': result.append("<"); break; case '>': result.append(">"); break; case '"': result.append("""); break; case '\'': result.append("'"); break; case '&': result.append("&"); break; default: result.append(c); } c = i.next(); } return result.toString(); } }