171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard/*
271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * Copyright (C) 2013 The Android Open Source Project
371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard *
471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * Licensed under the Apache License, Version 2.0 (the "License");
571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * you may not use this file except in compliance with the License.
671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * You may obtain a copy of the License at
771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard *
871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard *      http://www.apache.org/licenses/LICENSE-2.0
971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard *
1071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * Unless required by applicable law or agreed to in writing, software
1171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * distributed under the License is distributed on an "AS IS" BASIS,
1271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * See the License for the specific language governing permissions and
1471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard * limitations under the License.
1571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard */
1671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
1771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroardpackage com.android.gallery3d.filtershow.filters;
1871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
195762138f8c561cb377d52f3379b89977fc2fbc14John Hofordimport android.util.JsonReader;
205762138f8c561cb377d52f3379b89977fc2fbc14John Hofordimport android.util.JsonWriter;
2136e567afff815bc821c2859ebdeec86b1fca1ef6nicolasroardimport android.util.Log;
22099e5fc37091823f448b95bc4f3d3511e9919fbfztenghui
236900cad45d240c9a54b92991538b6a33652e766cnicolasroardimport com.android.gallery3d.filtershow.editors.BasicEditor;
2471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
255762138f8c561cb377d52f3379b89977fc2fbc14John Hofordimport java.io.IOException;
265762138f8c561cb377d52f3379b89977fc2fbc14John Hofordimport java.util.ArrayList;
275762138f8c561cb377d52f3379b89977fc2fbc14John Hoford
283f0034140c165b86fbaf5c0369f39431548308e9John Hofordpublic class FilterRepresentation {
2971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    private static final String LOGTAG = "FilterRepresentation";
308d2c7ee02c8fde53effc787c172b10b14ae34d42nicolasroard    private static final boolean DEBUG = false;
3171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    private String mName;
32f60760478ec7c78446be0e0c6bc5502d1557974cnicolasroard    private int mPriority = TYPE_NORMAL;
33af85f6423ad5969f12ed68fd12a0fe3abce3e409nicolasroard    private Class<?> mFilterClass;
34e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    private boolean mSupportsPartialRendering = false;
356900cad45d240c9a54b92991538b6a33652e766cnicolasroard    private int mTextId = 0;
366900cad45d240c9a54b92991538b6a33652e766cnicolasroard    private int mEditorId = BasicEditor.ID;
376900cad45d240c9a54b92991538b6a33652e766cnicolasroard    private int mButtonId = 0;
386900cad45d240c9a54b92991538b6a33652e766cnicolasroard    private int mOverlayId = 0;
39d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    private boolean mOverlayOnly = false;
406900cad45d240c9a54b92991538b6a33652e766cnicolasroard    private boolean mShowParameterValue = true;
41edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard    private boolean mIsBooleanFilter = false;
42afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    private String mSerializationName;
43cef6ad5d4a60a6e2960f7f72de624d5e60b3908anicolasroard    public static final byte TYPE_BORDER = 1;
44cef6ad5d4a60a6e2960f7f72de624d5e60b3908anicolasroard    public static final byte TYPE_FX = 2;
45cef6ad5d4a60a6e2960f7f72de624d5e60b3908anicolasroard    public static final byte TYPE_WBALANCE = 3;
46cef6ad5d4a60a6e2960f7f72de624d5e60b3908anicolasroard    public static final byte TYPE_VIGNETTE = 4;
47cef6ad5d4a60a6e2960f7f72de624d5e60b3908anicolasroard    public static final byte TYPE_NORMAL = 5;
48cef6ad5d4a60a6e2960f7f72de624d5e60b3908anicolasroard    public static final byte TYPE_TINYPLANET = 6;
4976a8b489a62ed82919c8b6339123488c09fc0168Ruben Brunk    public static final byte TYPE_GEOMETRY = 7;
505762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    protected static final String NAME_TAG = "Name";
51cef6ad5d4a60a6e2960f7f72de624d5e60b3908anicolasroard
5271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public FilterRepresentation(String name) {
5371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        mName = name;
5471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
5571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
563f0034140c165b86fbaf5c0369f39431548308e9John Hoford    public FilterRepresentation copy(){
573f0034140c165b86fbaf5c0369f39431548308e9John Hoford        FilterRepresentation representation = new FilterRepresentation(mName);
583f0034140c165b86fbaf5c0369f39431548308e9John Hoford        representation.useParametersFrom(this);
593f0034140c165b86fbaf5c0369f39431548308e9John Hoford        return representation;
603f0034140c165b86fbaf5c0369f39431548308e9John Hoford    }
613f0034140c165b86fbaf5c0369f39431548308e9John Hoford
623f0034140c165b86fbaf5c0369f39431548308e9John Hoford    protected void copyAllParameters(FilterRepresentation representation) {
6371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        representation.setName(getName());
64d0bab8c396b0b10fdfd07a9d4fccf969d8d46747nicolasroard        representation.setFilterClass(getFilterClass());
653cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk        representation.setFilterType(getFilterType());
66e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        representation.setSupportsPartialRendering(supportsPartialRendering());
676900cad45d240c9a54b92991538b6a33652e766cnicolasroard        representation.setTextId(getTextId());
686900cad45d240c9a54b92991538b6a33652e766cnicolasroard        representation.setEditorId(getEditorId());
696900cad45d240c9a54b92991538b6a33652e766cnicolasroard        representation.setOverlayId(getOverlayId());
70d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford        representation.setOverlayOnly(getOverlayOnly());
716900cad45d240c9a54b92991538b6a33652e766cnicolasroard        representation.setShowParameterValue(showParameterValue());
72afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford        representation.mSerializationName = mSerializationName;
73edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard        representation.setIsBooleanFilter(isBooleanFilter());
7471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
7571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
7671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public boolean equals(FilterRepresentation representation) {
7792e387187a872b3b0986b378954eb611aa83fdeanicolasroard        if (representation == null) {
7892e387187a872b3b0986b378954eb611aa83fdeanicolasroard            return false;
7992e387187a872b3b0986b378954eb611aa83fdeanicolasroard        }
80c9ca6d1eb85a71b7667f4c25d879e78cce16ac4cztenghui        if (representation.mFilterClass == mFilterClass
8171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard                && representation.mName.equalsIgnoreCase(mName)
8271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard                && representation.mPriority == mPriority
83d2e9ea0ce1949e192e80ce806e702606694440acztenghui                // TODO: After we enable partial rendering, we can switch back
84d2e9ea0ce1949e192e80ce806e702606694440acztenghui                // to use member variable here.
85d2e9ea0ce1949e192e80ce806e702606694440acztenghui                && representation.supportsPartialRendering() == supportsPartialRendering()
866900cad45d240c9a54b92991538b6a33652e766cnicolasroard                && representation.mTextId == mTextId
876900cad45d240c9a54b92991538b6a33652e766cnicolasroard                && representation.mEditorId == mEditorId
886900cad45d240c9a54b92991538b6a33652e766cnicolasroard                && representation.mButtonId == mButtonId
896900cad45d240c9a54b92991538b6a33652e766cnicolasroard                && representation.mOverlayId == mOverlayId
90d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford                && representation.mOverlayOnly == mOverlayOnly
91edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard                && representation.mShowParameterValue == mShowParameterValue
92edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard                && representation.mIsBooleanFilter == mIsBooleanFilter) {
9371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard            return true;
9471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        }
9571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        return false;
9671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
9771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
98edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard    public boolean isBooleanFilter() {
99edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard        return mIsBooleanFilter;
100edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard    }
101edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard
102edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard    public void setIsBooleanFilter(boolean value) {
103edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard        mIsBooleanFilter = value;
104edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard    }
105edf4b095a1d904df6c02d49e3ec575c5c3c9c749nicolasroard
1063cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk    @Override
10771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public String toString() {
10871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        return mName;
10971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
11071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
11171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public void setName(String name) {
11271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        mName = name;
11371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
11471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
11571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public String getName() {
11671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        return mName;
11771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
11871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
119afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    public void setSerializationName(String sname) {
120afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford        mSerializationName = sname;
121afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    }
122afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford
123afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    public String getSerializationName() {
124afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford        return mSerializationName;
125afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    }
126afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford
1273cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk    public void setFilterType(int priority) {
12871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        mPriority = priority;
12971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
13071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
1313cb106ddd7ad0f8494ac9c7a33660831c1694295Ruben Brunk    public int getFilterType() {
13271f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        return mPriority;
13371f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
13471f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
13571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public boolean isNil() {
13671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        return false;
13771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
13871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
139e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public boolean supportsPartialRendering() {
140430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        return mSupportsPartialRendering;
141e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    }
142e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
143e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    public void setSupportsPartialRendering(boolean value) {
144e5498da0262fc836738aad63ea30286d8afa643cnicolasroard        mSupportsPartialRendering = value;
145e5498da0262fc836738aad63ea30286d8afa643cnicolasroard    }
146e5498da0262fc836738aad63ea30286d8afa643cnicolasroard
14771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public void useParametersFrom(FilterRepresentation a) {
14871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
14971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
150c9ca6d1eb85a71b7667f4c25d879e78cce16ac4cztenghui    public boolean allowsSingleInstanceOnly() {
15192e387187a872b3b0986b378954eb611aa83fdeanicolasroard        return false;
15292e387187a872b3b0986b378954eb611aa83fdeanicolasroard    }
15392e387187a872b3b0986b378954eb611aa83fdeanicolasroard
154af85f6423ad5969f12ed68fd12a0fe3abce3e409nicolasroard    public Class<?> getFilterClass() {
15571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        return mFilterClass;
15671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
15771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
158af85f6423ad5969f12ed68fd12a0fe3abce3e409nicolasroard    public void setFilterClass(Class<?> filterClass) {
15971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        mFilterClass = filterClass;
16071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
16171f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard
162545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui    // This same() function is different from equals(), basically it checks
163545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui    // whether 2 FilterRepresentations are the same type. It doesn't care about
164545eca119e7b2dc783f8d89a0de4330b5444ed79ztenghui    // the values.
16571f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    public boolean same(FilterRepresentation b) {
16671f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        if (b == null) {
16771f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard            return false;
16871f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        }
16971f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard        return getFilterClass() == b.getFilterClass();
17071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard    }
1716900cad45d240c9a54b92991538b6a33652e766cnicolasroard
1726900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public int getTextId() {
1736900cad45d240c9a54b92991538b6a33652e766cnicolasroard        return mTextId;
1746900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
1756900cad45d240c9a54b92991538b6a33652e766cnicolasroard
1766900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public void setTextId(int textId) {
1776900cad45d240c9a54b92991538b6a33652e766cnicolasroard        mTextId = textId;
1786900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
1796900cad45d240c9a54b92991538b6a33652e766cnicolasroard
1806900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public int getOverlayId() {
1816900cad45d240c9a54b92991538b6a33652e766cnicolasroard        return mOverlayId;
1826900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
1836900cad45d240c9a54b92991538b6a33652e766cnicolasroard
1846900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public void setOverlayId(int overlayId) {
1856900cad45d240c9a54b92991538b6a33652e766cnicolasroard        mOverlayId = overlayId;
1866900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
1876900cad45d240c9a54b92991538b6a33652e766cnicolasroard
188d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    public boolean getOverlayOnly() {
189d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford        return mOverlayOnly;
190d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    }
191d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford
192d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    public void setOverlayOnly(boolean value) {
193d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford        mOverlayOnly = value;
194d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    }
195d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford
196d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    final public int getEditorId() {
1976900cad45d240c9a54b92991538b6a33652e766cnicolasroard        return mEditorId;
1986900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
1996900cad45d240c9a54b92991538b6a33652e766cnicolasroard
200d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    public int[] getEditorIds() {
201d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford        return new int[] {
202d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford        mEditorId };
203d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford    }
204d61a2f9fcaad0309132b6b9b666c3dc6df62fed7John Hoford
2056900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public void setEditorId(int editorId) {
2066900cad45d240c9a54b92991538b6a33652e766cnicolasroard        mEditorId = editorId;
2076900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
2086900cad45d240c9a54b92991538b6a33652e766cnicolasroard
2096900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public boolean showParameterValue() {
2106900cad45d240c9a54b92991538b6a33652e766cnicolasroard        return mShowParameterValue;
2116900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
2126900cad45d240c9a54b92991538b6a33652e766cnicolasroard
2136900cad45d240c9a54b92991538b6a33652e766cnicolasroard    public void setShowParameterValue(boolean showParameterValue) {
2146900cad45d240c9a54b92991538b6a33652e766cnicolasroard        mShowParameterValue = showParameterValue;
2156900cad45d240c9a54b92991538b6a33652e766cnicolasroard    }
2166900cad45d240c9a54b92991538b6a33652e766cnicolasroard
2172562a98c156a55b51239fea383838a11a0292c0enicolasroard    public String getStateRepresentation() {
2182562a98c156a55b51239fea383838a11a0292c0enicolasroard        return "";
2192562a98c156a55b51239fea383838a11a0292c0enicolasroard    }
220d4bec864946917e434bfb53846747d665bbe1d07nicolasroard
2215762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    /**
2225762138f8c561cb377d52f3379b89977fc2fbc14John Hoford     * Method must "beginObject()" add its info and "endObject()"
2235762138f8c561cb377d52f3379b89977fc2fbc14John Hoford     * @param writer
2245762138f8c561cb377d52f3379b89977fc2fbc14John Hoford     * @throws IOException
2255762138f8c561cb377d52f3379b89977fc2fbc14John Hoford     */
2265762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    public void serializeRepresentation(JsonWriter writer) throws IOException {
2275762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        writer.beginObject();
2285762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        {
2295762138f8c561cb377d52f3379b89977fc2fbc14John Hoford            String[][] rep = serializeRepresentation();
2305762138f8c561cb377d52f3379b89977fc2fbc14John Hoford            for (int k = 0; k < rep.length; k++) {
2315762138f8c561cb377d52f3379b89977fc2fbc14John Hoford                writer.name(rep[k][0]);
2325762138f8c561cb377d52f3379b89977fc2fbc14John Hoford                writer.value(rep[k][1]);
2335762138f8c561cb377d52f3379b89977fc2fbc14John Hoford            }
2345762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        }
2355762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        writer.endObject();
2365762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    }
2375762138f8c561cb377d52f3379b89977fc2fbc14John Hoford
2385762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    // this is the old way of doing this and will be removed soon
239afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    public String[][] serializeRepresentation() {
2405762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        String[][] ret = {{NAME_TAG, getName()}};
241afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford        return ret;
242afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    }
243afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford
2445762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    public void deSerializeRepresentation(JsonReader reader) throws IOException {
2455762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        ArrayList<String[]> al = new ArrayList<String[]>();
2465762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        reader.beginObject();
2475762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        while (reader.hasNext()) {
2485762138f8c561cb377d52f3379b89977fc2fbc14John Hoford            String[] kv = {reader.nextName(), reader.nextString()};
2495762138f8c561cb377d52f3379b89977fc2fbc14John Hoford            al.add(kv);
2505762138f8c561cb377d52f3379b89977fc2fbc14John Hoford
2515762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        }
2525762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        reader.endObject();
2535762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        String[][] oldFormat = al.toArray(new String[al.size()][]);
2545762138f8c561cb377d52f3379b89977fc2fbc14John Hoford
2555762138f8c561cb377d52f3379b89977fc2fbc14John Hoford        deSerializeRepresentation(oldFormat);
2565762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    }
2575762138f8c561cb377d52f3379b89977fc2fbc14John Hoford
2585762138f8c561cb377d52f3379b89977fc2fbc14John Hoford    // this is the old way of doing this and will be removed soon
259afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    public void deSerializeRepresentation(String[][] rep) {
260afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford        for (int i = 0; i < rep.length; i++) {
2615762138f8c561cb377d52f3379b89977fc2fbc14John Hoford            if (NAME_TAG.equals(rep[i][0])) {
262099e5fc37091823f448b95bc4f3d3511e9919fbfztenghui                mName = rep[i][1];
263afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford                break;
264afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford            }
265afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford        }
266afa8ed9d46e760d4b0c0331cfcb4bb49ef6ba280John Hoford    }
267cdadeb52f12d26844db65abf9f445faee1cba199Ruben Brunk
268cdadeb52f12d26844db65abf9f445faee1cba199Ruben Brunk    // Override this in subclasses
269cdadeb52f12d26844db65abf9f445faee1cba199Ruben Brunk    public int getStyle() {
270cdadeb52f12d26844db65abf9f445faee1cba199Ruben Brunk        return -1;
271cdadeb52f12d26844db65abf9f445faee1cba199Ruben Brunk    }
272430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard
273430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    public boolean canMergeWith(FilterRepresentation representation) {
2749e52a04b99ec1ebb943d1ccb2531d733af5cfedbnicolasroard        if (getFilterType() == FilterRepresentation.TYPE_GEOMETRY
2759e52a04b99ec1ebb943d1ccb2531d733af5cfedbnicolasroard            && representation.getFilterType() == FilterRepresentation.TYPE_GEOMETRY) {
276430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard            return true;
277430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        }
278430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard        return false;
279430e46b06f8e7ee1ca3e7ecdcef3e0a978637c03nicolasroard    }
28071f04cbaedbb89e313e0b86b531640db2d3f6016nicolasroard}
281