📄 classdescriptorupdatemethodresolver.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 + -