alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

What this is

This file is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Other links

The source code

/*
 *                 Sun Public License Notice
 * 
 * The contents of this file are subject to the Sun Public License
 * Version 1.0 (the "License"). You may not use this file except in
 * compliance with the License. A copy of the License is available at
 * http://www.sun.com/
 * 
 * The Original Code is NetBeans. The Initial Developer of the Original
 * Code is Sun Microsystems, Inc. Portions Copyright 1997-2003 Sun
 * Microsystems, Inc. All Rights Reserved.
 */

package org.netbeans.core.registry;

import org.netbeans.spi.registry.BasicContext;
import org.netbeans.core.registry.ConvertorBinding;
import org.netbeans.core.registry.InstanceBinding;
import org.openide.filesystems.FileObject;
import org.openide.ErrorManager;

import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import java.lang.ref.WeakReference;

/**
 * 

* Uses subclasses of ObjectBinding.Reader and ObjectBinding.Writer:

    *
  • ConvertorBinding
  • *
  • InstanceBinding
  • *
  • ShadowBinding
  • *
  • ObjectRefBinding
  • *
  • SettingBinding
  • *
*

* * (copy & pasted & refactored from original org.netbeans.core.registry.ObjectBinding) */ abstract class ObjectBinding { private static final ErrorManager err = ErrorManager.getDefault().getInstance("org.netbeans.core.registry"); // NOI18N private static final Reader[] READERS = new Reader[]{InstanceBinding.READER, ShadowBinding.READER, ObjectRefBinding.READER, SettingBinding.READER, ConvertorBinding.READER, XMLBasedBinding.READER}; private static final Writer[] WRITERS = new Writer[]{ObjectRefBinding.WRITER, ConvertorBinding.WRITER, SettingBinding.WRITER}; private FileObject file; private WeakReference cachedInstance = null; ObjectBinding(FileObject fo) { this.file = fo; } /** * @return may return null */ BasicContext getContext () { return null; } public static Collection getFileExtensions() { Set s = new HashSet(READERS.length); for (int i = 0; i < READERS.length; i++) { Reader reader = READERS[i]; s.add(reader.getFileExtension()); } return Collections.unmodifiableCollection(s); } public static ObjectBinding get(BasicContext ctx, FileObject fo) { if (fo == null || !fo.isValid() || fo.isFolder()) return null; Reader r = getReader(fo); if (r == null) { ErrorManager errorManager = getErrorManager(); if (errorManager.isLoggable(ErrorManager.INFORMATIONAL)) { errorManager.log("File " + fo + " was parsed, but it is not a .settings file nor namespace-aware XML. It will be ignored."); } } return (r != null) ? r.getObjectBinding(ctx, fo) : null; } public void delete () throws IOException { FileObject file = getFile(); if (file != null) file.delete(); } public ObjectBinding write(final Object object) throws IOException { Writer w = getWriter(object); if (w != null) { w.write(getFile(), object); } Reader r = (w != null) ? getReader(getFile()) : null; ObjectBinding retVal = null; if (r != null) { retVal = r.getObjectBinding(getContext(),getFile ()); retVal.cachedInstance = new WeakReference(object); } return retVal; } public static ObjectBinding write(BasicContext ctx, FileObject folder, String bindingName, Object object) throws IOException { Writer w = getWriter(object); FileObject fo = null; if (w != null) { fo = w.write(folder, bindingName, object); } Reader r = (fo != null) ? getReader(fo) : null; ObjectBinding retVal = null; if (r != null) { retVal = r.getObjectBinding(ctx,fo); retVal.cachedInstance = new WeakReference(object); } return retVal; } /** * Provides module descriptor that just implements method equals. * Method hashCode may NOT BE PROPERLY IMPLEMENTED !!! * @return module descriptor */ public Object getModuleDescriptor() { return getDefaultModuleDescriptor(); } private static Object getDefaultModuleDescriptor() { return new Object() { public boolean equals(Object obj) { return false; } }; } private static Reader getReader(FileObject fo) { for (int i = 0; i < READERS.length; i++) { if (READERS[i].canRead(fo)) { return READERS[i]; } } return null; } private static Writer getWriter(Object obj) { for (int i = 0; i < WRITERS.length; i++) { if (WRITERS[i].canWrite(obj)) { return WRITERS[i]; } } return null; } /** * @return may return null */ public final FileObject getFile() { return file; } public String getBindingName() { return file.getName(); } public final Object getObject() throws IOException{ Object retVal = null; if (cachedInstance == null || (retVal = cachedInstance.get()) == null) { retVal = createInstance(); cachedInstance = new WeakReference(retVal); } return retVal; } public boolean isBinding(String bindingName) { return getBindingName().equals(bindingName); } abstract public Object createInstance() throws IOException; abstract public boolean isEnabled(); public static final ErrorManager getErrorManager() { return err; } abstract static class Reader { abstract boolean canRead(FileObject fo); abstract String getFileExtension(); abstract ObjectBinding getObjectBinding(BasicContext ctx, FileObject fo); } abstract static class Writer { abstract boolean canWrite(Object obj); abstract void write(FileObject fo, Object obj) throws IOException; abstract String getFileExtension(); final FileObject write(FileObject folder, String bindingName, Object obj) throws IOException { FileObject fo; synchronized (this) { fo = folder.getFileObject(bindingName, getFileExtension()); if (fo == null) { fo = folder.createData(bindingName, getFileExtension()); } } this.write(fo, obj); return fo; } } }
... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.