Package com.salesforce.ide.schemabrowser.ui.tableviewer

Source Code of com.salesforce.ide.schemabrowser.ui.tableviewer.DataRowList

/*******************************************************************************
* Copyright (c) 2014 Salesforce.com, inc..
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*     Salesforce.com, inc. - initial API and implementation
******************************************************************************/
package com.salesforce.ide.schemabrowser.ui.tableviewer;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
import java.util.Vector;

import org.apache.log4j.Logger;

import com.salesforce.ide.core.internal.utils.Utils;
import com.salesforce.ide.core.internal.utils.XmlConstants;
import com.sforce.soap.partner.sobject.wsc.SObject;
import com.sforce.soap.partner.wsc.QueryResult;
import com.sforce.ws.bind.XmlObject;

/**
* Legacy class
*
* @author dcarroll
*/
public class DataRowList {
    private static final Logger logger = Logger.getLogger(DataRowList.class);

    private final int COUNT = 10;

    private final Vector<DataRow> dataRows = new Vector<DataRow>(COUNT);

    private final Set<IDataRowListViewer> changeListeners = new HashSet<IDataRowListViewer>();

    // Combo box choices
    static final String[] OWNERS_ARRAY = { "?", "Nancy", "Larry", "Joe" };

    /**
     * Constructor
     */
    public DataRowList(QueryResult qr) {
        super();
        this.initData(qr);
    }

    public DataRowList() {
        super();
        this.initData();
    }

    /*
     * Initialize the table data. Create COUNT tasks and add them them to the collection of tasks
     */
    private void initData() {
        DataRow task;
        for (int i = 0; i < COUNT; i++) {
            task = new DataRow("Task " + i);
            task.setOwner(OWNERS_ARRAY[i % 3]);
            dataRows.add(task);
        }
    };

    /**
     * Because we need to use indexes of columns to grab the values from the label provider, we need to marshal this
     * into a vector
     *
     * @param qr
     */
    private void initData(QueryResult qr) {
        if (qr == null) {
            return;
        }

        if (qr.getSize() > 0 && Utils.isEmpty(qr.getRecords())) {
            // prepareCountRow(qr);
        } else {
            prepareRecordRows(qr);
        }
    };

    private void prepareRecordRows(QueryResult qr) {
        if (qr == null) {
            logger.warn("Unable to prepare schema browser rows - query result is null");
            return;
        }

        DataRow task;

        SObject[] records = qr.getRecords();
        if (records == null) {
            logger.warn("Unable to prepare schema browser rows - returned record array null");
            return;
        }

        for (SObject sobject : records) {
            Vector<XmlObject> record = recordToVector(sobject);
            task = new DataRow(record);
            // task.setOwner(OWNERS_ARRAY[i % 3]);
            dataRows.add(task);
        }
    }

    private Vector<XmlObject> recordToVector(SObject record) {
        // A couple of special cases to handle:
        // If the record.getType() == record.getField(Xml.ELEM_TYPE) then we
        // skip
        // that field.
        // If the field is named id and has a null, we skip that.
        // We only add a field names Id once.
        boolean hasId = record.getId() != null;
        Iterator<XmlObject> it = record.getChildren();
        Vector<XmlObject> vRecord = new Vector<XmlObject>();
        if (hasId) {
            vRecord.add(record.getChildren("Id").next());
        }
        while (it.hasNext()) {
            XmlObject field = it.next();
            String fieldName = field.getName().getLocalPart();
            if ("Id".equalsIgnoreCase(fieldName) && hasId) {
                // Skip
            } else if (XmlConstants.ELEM_TYPE.equals(fieldName) && record.getType().equals(field.getValue())) {
                // Skip
            } else if (field.getXmlType() != null) {
                // This can be either an sObjet or a queryResults
                javax.xml.namespace.QName xmlType = field.getXmlType();
                if ("sObject".equals(xmlType.getLocalPart())) {
                    // This is a lookup relationship, so we need to add the
                    // sobject which is actually
                    // the array of children, hmm....
                    vRecord.add(field);
                } else {
                    // field.getChild("records").
                    vRecord.add(field);
                }
            } else {
                if ("Id".equalsIgnoreCase(fieldName) && field.getValue() != null) {
                    vRecord.add(field);
                } else if (!"Id".equalsIgnoreCase(fieldName)) {
                    vRecord.add(field);
                }
            }
        }
        return vRecord;
    }

    /**
     * Return the array of owners, used be the cell editor
     */
    public String[] getOwners() {
        return OWNERS_ARRAY;
    }

    /**
     * Return the collection of tasks
     */
    public Vector<DataRow> getTasks() {
        return dataRows;
    }

    /**
     * Add a new task to the collection of tasks, won't use this as we don't add to our result set
     */
    public void addTask() {
        DataRow task = new DataRow("New task");
        dataRows.add(dataRows.size(), task);
        Iterator<IDataRowListViewer> iterator = changeListeners.iterator();
        while (iterator.hasNext()) {
            (iterator.next()).addTask(task);
        }
    }

    /**
     * Won't use this either since we don't delete from our result set
     *
     * @param task
     */
    public void removeTask(DataRow task) {
        dataRows.remove(task);
        Iterator<IDataRowListViewer> iterator = changeListeners.iterator();
        while (iterator.hasNext()) {
            (iterator.next()).removeTask(task);
        }
    }

    /**
     * Won't use this either since the result set is read only
     *
     * @param task
     */
    public void taskChanged(DataRow task) {
        Iterator<IDataRowListViewer> iterator = changeListeners.iterator();
        while (iterator.hasNext()) {
            (iterator.next()).updateTask(task);
        }
    }

    /**
     * Ultimately, will remove this
     *
     * @param viewer
     */
    public void removeChangeListener(IDataRowListViewer viewer) {
        changeListeners.remove(viewer);
    }

    /**
     * Ultimately, will remove this too
     *
     * @param viewer
     */
    public void addChangeListener(IDataRowListViewer viewer) {
        changeListeners.add(viewer);
    }

}
TOP

Related Classes of com.salesforce.ide.schemabrowser.ui.tableviewer.DataRowList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.