updateresult.java

来自「Rapla是一个灵活的多用户资源管理系统。它提供的一些功能有:日历GUI」· Java 代码 · 共 132 行

JAVA
132
字号
/*--------------------------------------------------------------------------*
 | Copyright (C) 2006 Christopher Kohlhaas                                  |
 |                                                                          |
 | This program is free software; you can redistribute it and/or modify     |
 | it under the terms of the GNU General Public License as published by the |
 | Free Software Foundation. A copy of the license has been included with   |
 | these distribution in the COPYING file, if not go to www.fsf.org         |
 |                                                                          |
 | As a special exception, you are granted the permissions to link this     |
 | program with every library, which license fulfills the Open Source       |
 | Definition as published by the Open Source Initiative (OSI).             |
 *--------------------------------------------------------------------------*/
package org.rapla.storage;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

import org.rapla.entities.User;

public class UpdateResult 
{
    User user;
    List operations = new ArrayList();
    
    public UpdateResult(User user) {
        this.user = user;
    }
    
    public void addOperation(final Object operation) {
        if ( operation == null)
            throw new IllegalStateException( "Operation can't be null" );
        operations.add(operation);
    }
    
    public User getUser() {
        return user;
    }
    
    public Set getRemoveObjects() {
        return getObject( Remove.class);
    }

    public Set getChangeObjects() {
        return getObject( Change.class);
    }

    public Set getAddObjects() {
        return getObject( Add.class);
    }
    
    public Iterator getOperations( final Class operationClass) {
        Iterator operationsIt =  operations.iterator();
        if ( operationClass == null)
            throw new IllegalStateException( "OperationClass can't be null" );
        
        List list = new ArrayList();
        while ( operationsIt.hasNext() ) {
            Object obj = operationsIt.next();
            if ( operationClass.isInstance( obj ))
                list.add( obj );
        }
        
        return list.iterator();
    }

    protected Set getObject( final Class operationClass ) {
        Set set = new HashSet();
        if ( operationClass == null)
            throw new IllegalStateException( "OperationClass can't be null" );
        Iterator it= getOperations( operationClass);
        while (it.hasNext() ) {
            set.add( ((UpdateOperation)it.next() ).getCurrent());
        }
        return set;
    }
    
    
    static public class Add implements UpdateOperation {
        Object currentObj; // the actual represantation of the object
        Object newObj; // the object in the state when it was addes
        public Add(Object currentObj, Object newObj) {
            this.currentObj = currentObj;
            this.newObj = newObj;
        }
        public Object getCurrent() {
            return currentObj;
        }
        public Object getNew() {
            return newObj;
        }
    }

    static public class Remove implements UpdateOperation {
        Object currentObj; // the actual represantation of the object
        public Remove(Object currentObj) {
            this.currentObj = currentObj;
        }
        public Object getCurrent() {
            return currentObj;
        }
    }
    
    static public class Change implements UpdateOperation{
        Object currentObj; // the actual represantation of the object
        Object newObj; // the object in the state when it was changed
        Object oldObj; // the object in the state before it was changed
        public Change(Object currentObj, Object newObj, Object oldObj) {
            this.currentObj = currentObj;
            this.newObj = newObj;
            this.oldObj = oldObj;
        }
        public Object getCurrent() {
            return currentObj;
        }
        public Object getNew() {
            return newObj;
        }
        public Object getOld() {
            return oldObj;
        }
    }
}

interface UpdateOperation {
    public Object getCurrent();
}
    

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?