/*
* Copyright (c) 2012 Sam Harwell, Tunnel Vision Laboratories LLC
* All rights reserved.
*
* The source code of this document is proprietary work, and is not licensed for
* distribution. For information about licensing, contact Sam Harwell at:
* sam@tunnelvisionlabs.com
*/
package org.antlr.works.editor.grammar.codemodel.impl;
import java.util.Arrays;
import java.util.Collection;
import org.antlr.works.editor.grammar.codemodel.ChannelModel;
import org.antlr.works.editor.grammar.codemodel.FileModel;
import org.antlr.works.editor.grammar.codemodel.ModeModel;
import org.antlr.works.editor.grammar.codemodel.RuleModel;
import org.netbeans.api.annotations.common.NonNull;
import org.netbeans.api.annotations.common.NullAllowed;
import org.netbeans.api.project.Project;
import org.openide.filesystems.FileObject;
/**
*
* @author Sam Harwell
*/
public class FileModelImpl extends AbstractCodeElementModel implements FileModel {
@NullAllowed
private final FileObject fileObject;
@NonNull
private final FreezableArrayList<ImportDeclarationModelImpl> importDeclarations = new FreezableArrayList<>();
@NonNull
private final FreezableArrayList<TokenVocabDeclarationModelImpl> tokenVocabDeclarations = new FreezableArrayList<>();
@NonNull
private final FreezableArrayList<ChannelModelImpl> channels = new FreezableArrayList<>();
@NonNull
private final FreezableArrayList<ModeModelImpl> modes = new FreezableArrayList<>();
@NonNull
private final FreezableArrayList<RuleModelImpl> rules = new FreezableArrayList<>();
@NonNull
private final ProxyCollection<AbstractCodeElementModel> codeElements = new ProxyCollection<>(Arrays.asList(importDeclarations, tokenVocabDeclarations, channels, modes, rules));
public FileModelImpl(@NonNull FileObject fileObject, @NullAllowed Project project, @NonNull String packagePath) {
super(fileObject.getNameExt(), project, packagePath);
this.fileObject = fileObject;
}
public FileModelImpl(String name, Project project, String packagePath) {
super(name, project, packagePath);
this.fileObject = null;
}
public FileObject getFileObject() {
return fileObject;
}
@Override
public Collection<ImportDeclarationModelImpl> getImportDeclarations() {
return importDeclarations;
}
@Override
public Collection<TokenVocabDeclarationModelImpl> getTokenVocabDeclaration() {
return tokenVocabDeclarations;
}
@NonNull
@Override
public Collection<ChannelModelImpl> getChannels() {
return channels;
}
@NonNull
@Override
public Collection<? extends ChannelModel> getChannels(String name) {
return CodeModelCacheImpl.findElementsByName(getChannels(), name);
}
@NonNull
@Override
public Collection<ModeModelImpl> getModes() {
return modes;
}
@NonNull
@Override
public Collection<? extends ModeModel> getModes(String name) {
return CodeModelCacheImpl.findElementsByName(getModes(), name);
}
@NonNull
@Override
public Collection<RuleModelImpl> getRules() {
return rules;
}
@NonNull
@Override
public Collection<? extends RuleModel> getRules(String name) {
return CodeModelCacheImpl.findElementsByName(getRules(), name);
}
@NonNull
@Override
public Collection<? extends AbstractCodeElementModel> getMembers() {
return codeElements;
}
@NonNull
@Override
public FileVocabModelImpl getVocabulary() {
return new FileVocabModelImpl(this);
}
@Override
protected void freezeImpl() {
importDeclarations.freeze();
tokenVocabDeclarations.freeze();
channels.freeze();
modes.freeze();
rules.freeze();
super.freezeImpl();
}
}