165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/*
265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Copyright (C) 2011 The Android Open Source Project
365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Licensed under the Apache License, Version 2.0 (the "License");
565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * you may not use this file except in compliance with the License.
665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * You may obtain a copy of the License at
765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *      http://www.apache.org/licenses/LICENSE-2.0
965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn *
1065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * Unless required by applicable law or agreed to in writing, software
1165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * distributed under the License is distributed on an "AS IS" BASIS,
1265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * See the License for the specific language governing permissions and
1465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * limitations under the License.
1565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */
1665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
1765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
1865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpackage android.filterfw.io;
1965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.content.Context;
2165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.FilterGraph;
2265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.core.KeyValueMap;
2365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport android.filterfw.io.GraphIOException;
2465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
2565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport java.io.InputStream;
2665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport java.io.InputStreamReader;
2765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport java.io.IOException;
2865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennimport java.io.StringWriter;
2965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn/**
3165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn * @hide
3265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn */
3365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Rennpublic abstract class GraphReader {
3465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    protected KeyValueMap mReferences = new KeyValueMap();
3665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public abstract FilterGraph readGraphString(String graphString) throws GraphIOException;
3865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
3965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public abstract KeyValueMap readKeyValueAssignments(String assignments) throws GraphIOException;
4065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
4165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public FilterGraph readGraphResource(Context context, int resourceId) throws GraphIOException {
4265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        InputStream inputStream = context.getResources().openRawResource(resourceId);
4365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        InputStreamReader reader = new InputStreamReader(inputStream);
4465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        StringWriter writer = new StringWriter();
4565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        char[] buffer = new char[1024];
4665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        try {
4765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            int bytesRead;
4865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            while ((bytesRead = reader.read(buffer, 0, 1024)) > 0) {
4965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn                writer.write(buffer, 0, bytesRead);
5065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            }
5165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        } catch (IOException e) {
5265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn            throw new RuntimeException("Could not read specified resource file!");
5365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        }
5465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        return readGraphString(writer.toString());
5565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
5665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
5765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public void addReference(String name, Object object) {
5865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        mReferences.put(name, object);
5965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
6065953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6165953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public void addReferencesByMap(KeyValueMap refs) {
6265953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        mReferences.putAll(refs);
6365953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
6465953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6565953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    public void addReferencesByKeysAndValues(Object... references) {
6665953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn        mReferences.setKeyValues(references);
6765953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn    }
6865953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn
6965953da4636fbf5f0a24b8f5f2b5fa7d76ff13d9Marius Renn}
70