/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.datatools.connectivity.sql; import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.EList; import org.teiid.datatools.models.teiidsqlmodel.impl.DocumentImpl; /** * @since 8.0 */ public class TeiidDocument extends DocumentImpl { private Boolean columnsLoaded = Boolean.FALSE; private final Object documentColumns_LOCK = new Object(); private SoftReference documentColumnLoaderRef; public TeiidDocument() { super(); } @Override public EList getColumns() { synchronized (documentColumns_LOCK) { if (!columnsLoaded.booleanValue()) loadColumns(); } return super.getColumns(); } private final TeiidDocumentColumnLoader getDocumentColumnLoader() { if (documentColumnLoaderRef == null || documentColumnLoaderRef.get() == null) { documentColumnLoaderRef = new SoftReference( createDocumentLoader()); } return (TeiidDocumentColumnLoader) documentColumnLoaderRef.get(); } @SuppressWarnings({ "unchecked" }) private void loadColumns() { synchronized (documentColumns_LOCK) { boolean deliver = eDeliver(); try { List container = super.getColumns(); List existingColumns = new ArrayList(container); eSetDeliver(false); container.clear(); getDocumentColumnLoader().loadColumns(container, existingColumns); getDocumentColumnLoader().clearColumns(existingColumns); columnsLoaded = Boolean.TRUE; } catch (Exception e) { e.printStackTrace(); } finally { eSetDeliver(deliver); } } } private TeiidDocumentColumnLoader createDocumentLoader() { return new TeiidDocumentColumnLoader(this); } }