com.edgytech.umongo.DocFieldObject.java Source code

Java tutorial

Introduction

Here is the source code for com.edgytech.umongo.DocFieldObject.java

Source

/**
 *      Copyright (C) 2010 EdgyTech LLC.
 *
 *   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 com.edgytech.umongo;

import com.edgytech.swingfast.*;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import java.util.Date;
import java.util.Iterator;
import java.util.UUID;
import java.util.regex.Pattern;
import org.bson.types.BSONTimestamp;
import org.bson.types.Binary;
import org.bson.types.Code;
import org.bson.types.MaxKey;
import org.bson.types.MinKey;
import org.bson.types.ObjectId;

/**
 *
 * @author antoine
 */
public class DocFieldObject extends DocFieldText {

    public DocFieldObject(String id, String key, Object value, DocFieldObject parent) {
        super(id, key, value, parent);
        getJComponentBoundUnit(Item.edit).visible = false;
        getJComponentBoundUnit(Item.addField).visible = true;
        ((Div) getJComponentBoundUnit(Item.fields)).borderSize = 1;
        if (parent == null) {
            field = false;
            getJComponentBoundUnit(Item.up).visible = false;
            getJComponentBoundUnit(Item.down).visible = false;
            getJComponentBoundUnit(Item.remove).visible = false;
        }
    }

    @Override
    protected void structureComponentCustom(BoxPanel old) {
        Div fields = (Div) getBoundUnit(Item.fields);
        fields.removeAllChildren();
        DBObject doc = (DBObject) value;
        if (doc == null || doc.keySet().isEmpty()) {
            fields.addChild(new Text(null, null, "Empty"));
        } else {
            for (String key : doc.keySet()) {
                Object val = doc.get(key);
                if (val instanceof BasicDBObject) {
                    fields.addChild(new DocFieldObject(key, key, val, this));
                } else if (val instanceof BasicDBList) {
                    fields.addChild(new DocFieldArray(key, key, val, this));
                } else {
                    fields.addChild(new DocFieldText(key, key, val, this));
                }
            }
        }
        fields.structureComponent();
        super.structureComponentCustom(old);
    }

    @Override
    protected void commitComponentCustom(BoxPanel comp) {
        Div fields = (Div) getBoundUnit(Item.fields);
        DBObject doc = createDBObject();
        if (fields.hasChildren()) {
            for (Object child : fields.getChildren()) {
                if (child instanceof DocFieldText) {
                    DocFieldText text = (DocFieldText) child;
                    doc.put(text.getKey(), text.getValue());
                }
            }
        }
        value = doc;
    }

    void remove(String key) {
        DBObject doc = (DBObject) value;
        doc.removeField(key);
        structureComponent();
    }

    void moveUp(String key) {
        DBObject doc = (DBObject) value;
        value = createDBObject();
        Iterator<String> it = doc.keySet().iterator();
        String prev = it.next();
        while (it.hasNext()) {
            String cur = it.next();
            if (cur.equals(key)) {
                addField(cur, doc.get(cur));
                cur = prev;
            } else {
                addField(prev, doc.get(prev));
            }
            prev = cur;
        }
        addField(prev, doc.get(prev));
        structureComponent();
    }

    void moveDown(String key) {
        DBObject doc = (DBObject) value;
        value = createDBObject();
        Iterator<String> it = doc.keySet().iterator();
        while (it.hasNext()) {
            String cur = it.next();
            if (cur.equals(key) && it.hasNext()) {
                String next = it.next();
                addField(next, doc.get(next));
            }
            addField(cur, doc.get(cur));
        }
        structureComponent();
    }

    public void addNewField(String key, String type) {
        Object val = "";
        if (type.equals("Integer")) {
            val = new Integer(0);
        } else if (type.startsWith("Long")) {
            val = new Long(0);
        } else if (type.equals("Binary")) {
            val = new Binary((byte) 0, new byte[1]);
        } else if (type.startsWith("ObjectId")) {
            val = new ObjectId();
        } else if (type.equals("Boolean")) {
            val = new Boolean(true);
        } else if (type.equals("Code")) {
            val = new Code("");
        } else if (type.equals("Date")) {
            val = new Date();
        } else if (type.startsWith("Double")) {
            val = new Double(0.0);
        } else if (type.equals("Pattern")) {
            val = Pattern.compile("");
        } else if (type.equals("Timestamp")) {
            val = new BSONTimestamp((int) (System.currentTimeMillis() / 1000), 0);
        } else if (type.equals("Document")) {
            val = new BasicDBObject();
        } else if (type.equals("List")) {
            val = new BasicDBList();
        } else if (type.equals("Null")) {
            val = null;
        } else if (type.equals("UUID")) {
            val = UUID.randomUUID();
        } else if (type.equals("MinKey")) {
            val = new MinKey();
        } else if (type.equals("MaxKey")) {
            val = new MaxKey();
        }

        if (value == null) {
            value = createDBObject();
        }
        addField(key, val);
        structureComponent();
    }

    public void addField(ButtonBase button) {
        String key = getStringFieldValue(Item.addKey);
        String type = getStringFieldValue(Item.addType);
        DBObject doc = (DBObject) value;
        if (key.isEmpty() || (doc != null && doc.containsField(key))) {
            new InfoDialog(null, "Invalid Key", null, "Please provide a unique key for this field").show();
            return;
        }
        addNewField(key, type);
    }

    protected void addField(String key, Object val) {
        DBObject doc = (DBObject) value;
        doc.put(key, val);
    }

    protected DBObject createDBObject() {
        return new BasicDBObject();
    }

}