/*
This file belongs to the Servoy development and deployment environment, Copyright (C) 1997-2015 Servoy BV
This program is free software; you can redistribute it and/or modify it under
the terms of the GNU Affero General Public License as published by the Free
Software Foundation; either version 3 of the License, or (at your option) any
later version.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License along
with this program; if not, see http://www.gnu.org/licenses or write to the Free
Software Foundation,Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
*/
package com.servoy.j2db.persistence;
import org.json.JSONObject;
import org.sablo.specification.PropertyDescription;
/**
* An {@link IBasicWebObject} that is always a child/property of a parent component or WebCustomType. It is aware of it's location in parent (property name and maybe index as well in case of array)
*
* @author acostescu
*/
public interface IChildWebObject extends IBasicWebObject
{
/**
* In case this persist is nested inside a WebComponent or a WebCustomType, the json key is the key in the parent persist that has this value.
*/
String getJsonKey();
/**
* In case this persist is nested inside a WebComponent or a WebCustomType via an array property, the index is the index of this persist inside the parent's array property specified by {@link #getJsonKey()}.
*/
int getIndex();
/**
* @see #getIndex()
*/
public void setIndex(int i);
/**
* Some WebObjects hold in their (full) .frm JSON representation more then their json properties. In this case {@link #getFullJsonInFrmFile()} differs from {@link #getJson()}.
* For example a for a custom object {@link #getFullJsonInFrmFile()} is identical to {@link #getJson()} because it's just a map of key-value pairs in the .frm.
* But for {@link ChildWebComponent} persists, their .frm has all their json properties as a sub-property but also has the type of the component. In this case {@link #getJson()} refers
* to the component's properties, while {@link #getFullJsonInFrmFile()} refers to what the content is directly in the .frm file.
*/
JSONObject getFullJsonInFrmFile();
PropertyDescription getPropertyDescription();
@Override
IBasicWebObject getParent();
}