Example usage for org.springframework.boot.configurationprocessor.metadata ConfigurationMetadata getItems

List of usage examples for org.springframework.boot.configurationprocessor.metadata ConfigurationMetadata getItems

Introduction

In this page you can find the example usage for org.springframework.boot.configurationprocessor.metadata ConfigurationMetadata getItems.

Prototype

public List<ItemMetadata> getItems() 

Source Link

Document

Return item meta-data.

Usage

From source file:com.keevosh.springframework.boot.netbeans.SpringBootConfigurationCompletionProvider.java

@Override
public CompletionTask createTask(int queryType, JTextComponent jtc) {

    if (queryType != CompletionProvider.COMPLETION_QUERY_TYPE) {
        return null;
    }//from   w  ww  .  j  a  v  a  2s.  c  om

    final TopComponent activeTC = TopComponent.getRegistry().getActivated();
    if (null == activeTC) {
        return null;
    }

    final FileObject fileObject = activeTC.getLookup().lookup(FileObject.class);
    if (null == fileObject) {
        return null;
    }

    final ClassPath cp = ClassPath.getClassPath(fileObject, ClassPath.EXECUTE);
    if (null == cp) {
        return null;
    }

    try {
        cp.getClassLoader(false)
                .loadClass("org.springframework.boot.context.properties.ConfigurationProperties");
    } catch (ClassNotFoundException ex) {
        return null;
    }

    final List<FileObject> configurationMetaFiles = cp
            .findAllResources("META-INF/spring-configuration-metadata.json");
    final List<ConfigurationMetadata> configurationMetas = new ArrayList<ConfigurationMetadata>(
            configurationMetaFiles.size());
    final JsonMarshaller jsonMarsaller = new JsonMarshaller();
    for (FileObject configurationMetaFile : configurationMetaFiles) {
        try {
            configurationMetas.add(jsonMarsaller.read(configurationMetaFile.getInputStream()));
        } catch (IOException ex) {
            Exceptions.printStackTrace(ex);
        }
    }

    return new AsyncCompletionTask(new AsyncCompletionQuery() {
        @Override
        protected void query(CompletionResultSet completionResultSet, Document document, int caretOffset) {
            String filter = null;
            int startOffset = caretOffset - 1;

            try {
                final StyledDocument bDoc = (StyledDocument) document;
                final int lineStartOffset = getRowFirstNonWhite(bDoc, caretOffset);
                final char[] line = bDoc.getText(lineStartOffset, caretOffset - lineStartOffset).toCharArray();
                final int whiteOffset = indexOfWhite(line);
                filter = new String(line, whiteOffset + 1, line.length - whiteOffset - 1);
                if (whiteOffset > 0) {
                    startOffset = lineStartOffset + whiteOffset + 1;
                } else {
                    startOffset = lineStartOffset;
                }
            } catch (BadLocationException ex) {
                Exceptions.printStackTrace(ex);
            }

            for (ConfigurationMetadata configurationMeta : configurationMetas) {
                for (ItemMetadata item : configurationMeta.getItems()) {
                    if (item.isOfItemType(ItemMetadata.ItemType.PROPERTY) && !item.getName().equals("")
                            && item.getName().startsWith(filter)) {
                        completionResultSet.addItem(
                                new SpringBootConfigurationCompletionItem(item, cp, startOffset, caretOffset));
                    }
                }
            }
            completionResultSet.finish();
        }
    }, jtc);
}