⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 classdescriptorupdatemethodresolver.java

📁 Java的面向对象数据库系统的源代码
💻 JAVA
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Library License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 1997-@year@ by SMB GmbH. All rights reserved.//// $Id: ClassDescriptorUpdateMethodResolver.java,v 1.3 2003/11/27 19:30:08 per_nyfelt Exp $package org.ozoneDB.tools.OPP.srcgen.resolve;import org.exolab.castor.xml.MarshalException;import org.exolab.castor.xml.ValidationException;import org.ozoneDB.tools.OPP.srcgen.MethodResolver;import org.ozoneDB.tools.OPP.srcgen.ResolverException;import org.ozoneDB.tools.OPP.srcgen.streamfactory.InputStreamFactory;import org.ozoneDB.tools.OPP.castor.Methods;import org.ozoneDB.tools.OPP.castor.OzoneClassDescriptor;import org.ozoneDB.tools.OPP.castor.PublicMethod;import org.ozoneDB.tools.OPP.message.MessageWriter;import org.ozoneDB.tools.OPP.CDHelper;import org.ozoneDB.core.Lock;import org.xml.sax.InputSource;import java.io.InputStream;import java.io.IOException;import java.util.Map;import java.util.HashMap;/** * Resolves update methods by reading a class descriptor. * @author Joakim Ohlrogge * To change this template use Options | File Templates. */public class ClassDescriptorUpdateMethodResolver implements MethodResolver {    private final String WRITELOCK = "WRITE";    private final String UPGRADELOCK = "UPGRADE";    private final String READLOCK = "READ";    //private final String MAXLOCK = "MAX";    private final String NONELOCK = "NONE";    private InputStreamFactory factory;    private MessageWriter msgListener;    public ClassDescriptorUpdateMethodResolver(InputStreamFactory factory, MessageWriter msgListener) {        this.factory = factory;        this.msgListener = msgListener;    }    public void resolveMethods(String className, MethodResolver.UpdateMethodBag result) throws ResolverException {        try {            searchUpdateMethods(className, result);        } catch (ValidationException e) {            throw new ResolverException(e);        } catch (MarshalException e) {            throw new ResolverException(e);        } catch (IOException e) {            // This means that the OCD was not found, no error            msgListener.info("No ocd was found!");            msgListener.debug("message: " + e.getMessage());        }    }    /**     * Try to load the XML class descriptor to...     */    private void searchUpdateMethods(String className, MethodResolver.UpdateMethodBag updateMethods) throws ValidationException, MarshalException, IOException {        OzoneClassDescriptor descriptor = null;        InputStream input = factory.newInstance(className);        descriptor = CDHelper.xml2Descriptor(new InputSource(input));        Methods mths = descriptor.getMethods();        PublicMethod[] m = mths.getPublicMethod();        for (int i = 0; i < m.length; i++) {            String methodName = m[i].getName();            String locklevel = m[i].getLocklevel();            int level = stringToLockLevel(locklevel);            boolean isUpdate = level > Lock.LEVEL_READ;/*            if (isUpdate && updateMethods.keySet().contains(methodName)) {                int oldlevel = ((Integer)updateMethods.get(methodName)).intValue();                if (oldlevel < level){                    msgListener.info("'"+methodName+"' has already been marked with a weaker lock level");                    msgListener.info("Upgrading '"+methodName+"' from level "+oldlevel+" to level "+ level);                    updateMethods.put(methodName, new Integer(level));                }                msgListener.warning("All '" + methodName + "' methods will be marked as update methods.");            }*/            if (isUpdate) {                updateMethods.addMethod(methodName, level);            }        }    }    private int stringToLockLevel(String level) {        if (WRITELOCK.equals(level)) {            return Lock.LEVEL_WRITE;        } else if (UPGRADELOCK.equals(level)) {            return Lock.LEVEL_UPGRADE;        } else if (READLOCK.equals(level)) {            return Lock.LEVEL_READ;        } else if (NONELOCK.equals(level)) {            return Lock.LEVEL_NONE;        }        return Lock.LEVEL_READ;    }}

⌨️ 快捷键说明

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