net.autosauler.ballance.server.model.DocumentTablePart.java Source code

Java tutorial

Introduction

Here is the source code for net.autosauler.ballance.server.model.DocumentTablePart.java

Source

/*******************************************************************************
 * Copyright 2011 Alex 'Ript' Malyshev <alexript@gmail.com>
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 ******************************************************************************/
package net.autosauler.ballance.server.model;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import net.autosauler.ballance.server.mongodb.Database;
import net.autosauler.ballance.shared.Description;
import net.autosauler.ballance.shared.Field;
import net.autosauler.ballance.shared.datatypes.DataTypes;

import org.w3c.dom.Element;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;

/**
 * The Class DocumentTablePart.
 * 
 * @author alexript
 */
public class DocumentTablePart extends AbstractStructuredData {

    /** The Constant fieldname_document. */
    private static final String fieldname_document = "docnum";

    /**
     * Instantiates a new document table part.
     * 
     * @param partname
     *            the partname
     * @param domain
     *            the domain
     */
    public DocumentTablePart(String partname, String domain) {
        super("doctab", partname, domain);
        setDocnum(new Long(0L));

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.autosauler.ballance.server.model.AbstractStructuredData#addFindAllOrders
     * (com.mongodb.BasicDBObject)
     */
    @Override
    protected void addFindAllOrders(BasicDBObject o) {
        return;

    }

    /*
     * (non-Javadoc)
     * 
     * @see net.autosauler.ballance.server.model.AbstractStructuredData#
     * addFindAllQueryParameters(com.mongodb.BasicDBObject)
     */
    @Override
    protected void addFindAllQueryParameters(BasicDBObject q) {
        q.put(fieldname_document, getDocnum());

    }

    /*
     * (non-Javadoc)
     * 
     * @see net.autosauler.ballance.server.model.AbstractStructuredData#
     * addFindLastNumberParams(com.mongodb.BasicDBObject)
     */
    @Override
    protected void addFindLastNumberParams(final BasicDBObject w) {
        w.put(fieldname_document, getDocnum());
    }

    /*
     * (non-Javadoc)
     * 
     * @see net.autosauler.ballance.server.model.AbstractStructuredData#
     * addGetRecordParams(com.mongodb.BasicDBObject)
     */
    @Override
    protected void addGetRecordParams(final BasicDBObject query) {
        query.put(fieldname_document, getDocnum());
    }

    public void addRecord(Hashtable<String, Object> values) {

        Set<String> names = struct.getNames();
        Iterator<String> i = names.iterator();
        while (i.hasNext()) {
            String name = i.next();
            if (!name.equals(fieldname_createdate) && !name.equals(fieldname_domain)
                    && !name.equals(fieldname_number) && !name.equals(fieldname_username)) {
                if (values.containsKey(name)) {
                    this.values.setObject(name, values.get(name));
                }
            }
        }

        setDocnum(getDocnum());
        setUsername("");
        save();
    }

    public Set<Long> findDocuments(String fieldname, Long value) {
        Set<Long> ids = new HashSet<Long>();
        DB db = Database.get(getDomain());
        if (db != null) {
            Database.retain();
            DBCollection coll = db.getCollection(getTableName());
            BasicDBObject q = new BasicDBObject();
            BasicDBObject w = new BasicDBObject();
            q.put(fieldname_domain, getDomain());
            q.put(fieldname, value);
            q.put(fieldname_trash, false);
            w.put("$query", q);

            DBCursor cur = coll.find(w);
            while (cur.hasNext()) {
                DBObject myDoc = cur.next();
                if (myDoc != null) {
                    Long docid = (Long) myDoc.get(fieldname_document);
                    if (!ids.contains(docid)) {
                        ids.add(docid);
                    }
                }
            }
            Database.release();
        }
        return ids;

    }

    /**
     * Gets the docnum.
     * 
     * @return the docnum
     */
    public Long getDocnum() {
        return (Long) values.get(fieldname_document);
    }

    public String getHelperName(String domain, String fieldname) {
        Structures s = new Structures(domain);
        Description d = s.getDescription("table." + getSuffix());
        List<Field> fields = d.get();
        for (Field field : fields) {
            if (field.getFieldname().equals(fieldname)) {
                return field.getHelper();
            }
        }
        return null;
    }

    /**
     * Gets the records.
     * 
     * @return the records
     */
    public Set<HashMap<String, Object>> getRecords() {
        Set<HashMap<String, Object>> set = new HashSet<HashMap<String, Object>>();
        DB db = Database.get(getDomain());
        if (db != null) {
            Database.retain();
            DBCollection coll = db.getCollection(getTableName());
            BasicDBObject q = new BasicDBObject();
            BasicDBObject w = new BasicDBObject();
            q.put(fieldname_domain, getDomain());
            q.put(fieldname_document, getDocnum());
            q.put(fieldname_trash, false);
            w.put("$query", q);

            BasicDBObject o = new BasicDBObject();
            o.put(fieldname_number, 1);
            addFindAllOrders(o);
            w.put("$orderby", o);

            DBCursor cur = coll.find(w);
            while (cur.hasNext()) {
                DBObject myDoc = cur.next();
                load(myDoc);
                HashMap<String, Object> map = toMap();
                set.add(map);
            }
            Database.release();
        }
        return set;
    }

    /*
     * (non-Javadoc)
     * 
     * @see net.autosauler.ballance.server.model.AbstractStructuredData#
     * initGlobalStructure()
     */
    @Override
    protected void initGlobalStructure() {
        struct.add(fieldname_document, DataTypes.DT_LONG, new Long(0L));

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.autosauler.ballance.server.model.AbstractStructuredData#initStructure
     * ()
     */
    @Override
    protected void initStructure(String domain) {
        Structures s = new Structures(domain);
        Description d = s.getDescription("table." + getSuffix());

        List<Field> fields = d.get();
        Iterator<Field> i = fields.iterator();
        while (i.hasNext()) {
            Field f = i.next();
            struct.add(f.getFieldname(), f.getType(), f.getDefval());
        }
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.autosauler.ballance.server.model.AbstractStructuredData#onCreate()
     */
    @Override
    public void onCreate() {
        return;
    }

    /*
     * (non-Javadoc)
     * 
     * @see net.autosauler.ballance.server.model.AbstractStructuredData#onDump()
     */
    @Override
    protected StringBuilder onDump() {
        return null;
    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.autosauler.ballance.server.model.AbstractStructuredData#onGetRecord
     * (java.lang.Long)
     */
    @Override
    protected void onGetRecord(Long number) {
        return;

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.autosauler.ballance.server.model.AbstractStructuredData#onInitDbStruct
     * (com.mongodb.BasicDBObject, com.mongodb.DBCollection)
     */
    @Override
    protected void onInitDbStruct(BasicDBObject i, DBCollection coll) {
        i.put(fieldname_document, 1);

        coll.createIndex(i);

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.autosauler.ballance.server.model.AbstractStructuredData#onRestore
     * (org.w3c.dom.Element)
     */
    @Override
    protected void onRestore(Element dump) {
        return;

    }

    /*
     * (non-Javadoc)
     * 
     * @see
     * net.autosauler.ballance.server.model.AbstractStructuredData#onUpdate()
     */
    @Override
    protected void onUpdate() {
        return;
    }

    /**
     * Sets the docnum.
     * 
     * @param docnum
     *            the docnum to set
     */
    public void setDocnum(Long docnum) {
        values.setObject(fieldname_document, docnum);

    }

    /**
     * Update records.
     * 
     * @param username
     *            the username
     * @param docnumber
     *            the docnumber
     * @param set
     *            the set
     * @return true, if successful
     */
    public boolean updateRecords(String username, Long docnumber, Set<HashMap<String, Object>> set) {
        boolean result = true;
        Iterator<HashMap<String, Object>> i = set.iterator();
        while (i.hasNext()) {
            HashMap<String, Object> map = i.next();
            fromMap(map);
            setNumber((Long) map.get(fieldname_number));
            if (getNumber() < 1L) {

                setDocnum(docnumber);
                setUsername(username);
            }
            result = result && save();
        }
        return result;
    }

}