/** * <copyright> * </copyright> * * $Id$ */ package net.atos.optimus.emf.metamodels.properties.util; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.Map; import net.atos.optimus.emf.metamodels.properties.CarriageReturn; import net.atos.optimus.emf.metamodels.properties.Comment; import net.atos.optimus.emf.metamodels.properties.Content; import net.atos.optimus.emf.metamodels.properties.Pair; import net.atos.optimus.emf.metamodels.properties.Properties; import net.atos.optimus.emf.metamodels.properties.PropertiesFactory; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.resource.impl.ResourceImpl; /** * <!-- begin-user-doc --> The <b>Resource </b> associated with the package. * <!-- end-user-doc --> * * @see net.atos.optimus.emf.metamodels.properties.util.PropertiesResourceFactoryImpl * @generated */ public class PropertiesResourceImpl extends ResourceImpl { /** * Creates an instance of the resource. <!-- begin-user-doc --> <!-- * end-user-doc --> * * @param uri * the URI of the new resource. * @generated */ public PropertiesResourceImpl(URI uri) { super(uri); } /** * Constant used to define the EQUALS keyword */ private static final String EQUALS = "="; /** * Constant used to define the SHARP keyword (for comments) */ private static final String SHARP = "#"; /** * Constant used to define the Carriage Return keyword (properties separator) */ private static final String CR = "\n"; /* * (non-Javadoc) * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#doLoad(java.io.InputStream, java.util.Map) */ @Override protected void doLoad(InputStream inputStream, Map<?, ?> options) throws IOException { Properties properties = PropertiesFactory.eINSTANCE.createProperties(); getContents().add(properties); InputStreamReader reader = new InputStreamReader(inputStream); BufferedReader bufferedReader = new BufferedReader(reader); while (bufferedReader.ready()) { String line = bufferedReader.readLine().trim(); if (line.length() == 0) { properties.getContents().add(PropertiesFactory.eINSTANCE.createCarriageReturn()); } else if (line.startsWith(SHARP)) { String value = line.substring(1); Comment comment = PropertiesFactory.eINSTANCE.createComment(); comment.setValue(value); properties.getContents().add(comment); } else if (line.indexOf(EQUALS) > 0) { String[] chunks = line.split(EQUALS); Pair pair = PropertiesFactory.eINSTANCE.createPair(); pair.setKey(chunks[0]); pair.setValue(chunks[1]); properties.getContents().add(pair); } } } /* * (non-Javadoc) * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#doSave(java.io.OutputStream, java.util.Map) */ @Override protected void doSave(OutputStream outputStream, Map<?, ?> options) throws IOException { BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(outputStream); if (getContents().size() > 0 && getContents().get(0) instanceof Properties) { Properties properties = (Properties) getContents().get(0); for (Content content : properties.getContents()) { if (content instanceof Pair) { Pair pair = (Pair) content; bufferedOutputStream.write((pair.getKey() + EQUALS + pair.getValue() + CR).getBytes()); } else if (content instanceof Comment) { Comment comment = (Comment) content; bufferedOutputStream.write((SHARP + comment.getValue() + CR).getBytes()); } else if (content instanceof CarriageReturn) { bufferedOutputStream.write(CR.getBytes()); } } } bufferedOutputStream.close(); } /* * (non-Javadoc) * @see org.eclipse.emf.ecore.resource.impl.ResourceImpl#doUnload() */ @Override protected void doUnload() { super.doUnload(); } } // PropertiesResourceImpl