litesoft
@ 961
litesoft / trunk / DeviceDesktopTest / src / org / litesoft / language / server / SimplePropertyFileAccessorImpl.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
package org.litesoft.language.server; import org.litesoft.commonfoundation.annotations.*; import java.io.*; import java.util.*; /** * Like Properties.java but simplified to only use natural lines and equals separators. And also supporting quoted values and only limited Key Forms Dotted * Constrained Ascii Identifier (See Key). * Only supports # comments (as only the first non-whitespace character in a line) * Leading and trailing whitespace is not preserved on save. */ public class SimplePropertyFileAccessorImpl implements SimplePropertyFileAccessor { private TextFileAccessor mPropertyFile; /** * @return Keys in the order they were stored! */ @Override public @NotNull @Immutable List<String> getKeys() { return Collections.unmodifiableList( new ArrayList<>( mOrderedKeyValues.keySet() ) ); } @Override public @Nullable String getProperty( String pKey ) { return null; } /** * Writes all the properties to a properties file retaining the order of the properties as they were read and retaining any comments as they were read as * well. * * @throws IOException */ @Override public void save() throws IOException { mPropertyFile.write( mLineTracker.toLines() ); } public SimplePropertyFileAccessorImpl( TextFileAccessor pPropertyFile ) throws IOException { mPropertyFile = pPropertyFile; mLineTracker = new LineTracker( mPropertyFile.read(), mOrderedKeyValues ); } public SimplePropertyFileAccessorImpl( File pPropertyFile ) throws IOException { this( new TextFileAccessorImpl( pPropertyFile ) ); } private Map<String, String> mOrderedKeyValues = new LinkedHashMap<>(); private LineTracker mLineTracker; private static class LineTracker { private Object[] mLines; public LineTracker( String[] pLines, Map<String, String> pKeyValues ) { mLines = new Object[pLines.length]; for ( int i = 0; i < pLines.length; i++ ) { String zLine = pLines[i].trim(); if ( zLine.length() == 0 || zLine.startsWith( "#" ) ) { mLines[i] = zLine; } else { Entry zEntry = Entry.parse( zLine ); if ( zEntry == null ) { throw new IllegalArgumentException( "Bad Line in Property File at: " + i ); } mLines[i] = zEntry; pKeyValues.put( zEntry.getKey(), zEntry.getValue() ); } } } public String[] toLines() { String[] zLines = new String[mLines.length]; for ( int i = 0; i < mLines.length; i++ ) { zLines[i] = mLines[i].toString(); } return zLines; } } private static class Entry { private String mKey; private String mValue; public static Entry parse( String pLine ) { // TODO: XXX return null; } public String getKey() { return mKey; } public String getValue() { return mValue; } } } |
Commits for litesoft/trunk/DeviceDesktopTest/src/org/litesoft/language/server/SimplePropertyFileAccessorImpl.java
Revision | Author | Commited | Message |
---|---|---|---|
961 Diff | GeorgeS | Fri 01 Aug, 2014 03:13:31 +0000 | Externalization Work. |
950 Diff | GeorgeS | Thu 19 Jun, 2014 17:57:04 +0000 | New Lines |
943 Diff | GeorgeS | Tue 03 Jun, 2014 04:25:50 +0000 | Extracting commonfoundation |
939 Diff | GeorgeS | Mon 02 Jun, 2014 21:30:31 +0000 | Extracting commonfoundation |
937 | markcmarkc | Mon 02 Jun, 2014 00:08:18 +0000 | Added property file loading for master unvalidated accessor |