package com.logicaldoc.gui.common.client.data;


import com.logicaldoc.gui.common.client.i18n.I18N;
import com.smartgwt.client.data.DataSource;
import com.smartgwt.client.data.fields.DataSourceFloatField;
import com.smartgwt.client.data.fields.DataSourceIntegerField;
import com.smartgwt.client.data.fields.DataSourceTextField;

/**
 * Datasource to handle folders and sub-folders structures. It is based on Xml
 * parsing
 * 
 * @author Marco Meschieri - LogicalDOC
 * @since 6.0
 */
public class FoldersDS extends DataSource {

	private static FoldersDS instance;

	public static FoldersDS get() {
		if (instance == null)
			instance = new FoldersDS(null, false);
		return instance;
	}

	public FoldersDS(String id, boolean nopagination) {
		String dsId = id;
		if (dsId == null)
			dsId = "FoldersDS";
		setID(dsId);
		setTitleField("name");
		setRecordXPath("/list/folder");
		DataSourceTextField name = new DataSourceTextField("name", I18N.message("name"), 255);

		DataSourceTextField color = new DataSourceTextField("color", I18N.message("color"), 255);

		DataSourceTextField recordId = new DataSourceTextField("id", I18N.message("id"));
		recordId.setPrimaryKey(true);
		recordId.setRequired(true);

		DataSourceTextField folderId = new DataSourceTextField("folderId", I18N.message("id"));
		folderId.setHidden(true);

		DataSourceTextField foldRef = new DataSourceTextField("foldRef");
		foldRef.setHidden(true);

		DataSourceIntegerField type = new DataSourceIntegerField("type", I18N.message("type"));
		type.setRequired(true);

		DataSourceFloatField size = new DataSourceFloatField("size", I18N.message("size"));

		DataSourceTextField parent = new DataSourceTextField("parent", "Parent ID");
		parent.setRequired(true);
		parent.setForeignKey(dsId + ".id");
		parent.setRootValue("/");

		setFields(recordId, name, folderId, foldRef, parent, type, size, color);

		setDataURL("data/folders.xml" + (nopagination ? "?nopagination=true" : ""));
		setClientOnly(false);
	}
}