Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   *  Copyright 2009-2014 Pavel Ponec
   *
   *  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 org.ujorm.orm;
 
 import java.util.List;
 import org.ujorm.Key;
 import org.ujorm.Ujo;
Abstract Metamodel

Author(s):
Pavel Ponec
 
 abstract public class AbstractMetaModel extends AbstractUjo {

    
Read-only state
 
     private boolean readOnly = false;

    
Property values are locked to read-only.
 
     public boolean readOnly() {
         return ;
     }

    
Unlock the meta-model. the method is for internal use only. The method must be enabled by parameter: org.ujorm.orm.metaModel.MoreParams.ENABLE_TO_UNLOCK_IMMUTABLE_METAMODEL.
 
     protected void clearReadOnly(OrmHandler handler) {
         if (enabledKey.of(handler.getParameters())) {
              = false;
         } else {
             throw new UnsupportedOperationException("The method must be enabled by parameter: " + enabledKey.toStringFull());
         }
     }
    
    
Set a read-only state.
 
     @SuppressWarnings("unchecked")
     public void setReadOnly(boolean recurse) {
         if (return;
 
         for (Key p : readKeys()) {
             if (p instanceof ListKey) {
                final List list = (Listp.of(this);
                p.setValue(thislist!=null
                    ? Collections.unmodifiableList(list)
                    : .
                );
             }
         }
 
         this. = true// <<<<<< LOCK THE OBJECT !!!
 
         if (recurse) {
             for (Key p : readKeys()) {
 
                 final Object value = p.of(this);
                 if (value instanceof AbstractMetaModel) {
                     ((AbstractMetaModelvalue).setReadOnly(recurse);
                 } else if (p instanceof ListKey) {
                     if (AbstractMetaModel.class.isAssignableFrom(((ListKeyp).getItemType())) {
                         for (AbstractMetaModel m : ((ListKey<AbstractMetaModelAbstractMetaModel>) p).getList(this)) {
                             m.setReadOnly(recurse);
                         }
                     }
                 }
             }
         }
     }

    
Test a read-only state
 
     public boolean checkReadOnly(final boolean exceptionthrows UnsupportedOperationException {
         if ( && exception) {
             throw new UnsupportedOperationException("The model have got a read-only state: " + getClass().getSimpleName());
         }
         return ;
     }
 
    @Override
    public void writeValue(final Key keyfinal Object value) {
        this.checkReadOnly(true);
        super.writeValue(keyvalue);
    }

    
Assign a 'valid value' over a default UJO key value only
    protected <UJO extends Ujo, VALUE> void changeDefault
    ( final UJO ujo
    , final Key<UJO, VALUE> key
    , final VALUE value
    ) {
        if (key.isDefault(ujo) && OrmTools.isFilled(value)) {
            key.setValue(ujovalue);
        }
    }
    @Override
    @SuppressWarnings("unchecked")
    public boolean readAuthorization(UjoAction actionKey keyObject value) {
        if (action.getType()==.) {
            return !key.isDefault(this);
        }
        return super.readAuthorization(actionkeyvalue);
    }

    
Getter based on one Key
    @SuppressWarnings("unchecked")
    public <UJO extends AbstractMetaModel, VALUE> VALUE get ( Key<UJO, VALUE> key) {
        return key.of((UJO) this);
    }
New to GrepCode? Check out our FAQ X