www.gusucode.com > appdesigner工具箱matlab源码程序 > appdesigner/+appdesigner/+internal/+application/getComponentPropertyDocumentation.m

    function docContent = getComponentPropertyDocumentation(componentTypes)
%GETCOMPONENTPROPERTYDOCUMENTATION Retrieves component property
%documentation from the Doc Center

%   Copyright 2016 The MathWorks, Inc.

% get a mapping of component types to the Doc Center search term
searchTermMap = buildSearchTermMap();

if(nargin > 0)
    if(ischar(componentTypes))
        % convert to a cell array to handle multiple queries
        componentTypes = {componentTypes};
    end
else
    % if no arguments are provided use all components to get property
    % documentation
    componentTypes = searchTermMap.keys();
end

% create an emoty struct to store Doc Center data
docContent(length(componentTypes)) = struct('Type', '', 'Properties', []);


for i = 1:length(componentTypes)
    if(isKey(searchTermMap, componentTypes{i}))
        key = searchTermMap(componentTypes{i});
        docContent(i).Type = componentTypes{i};
        % search Doc Center for component property documenation
        docContent = getGroupedPropertiesContent(docContent, i, key);
    end
end
end


function propStruct = getGroupedPropertiesContent(propStruct, index, searchTerm)
% retrieves data from the Doc Center

% search for properties page
propertyType = com.mathworks.helpsearch.reference.RefEntityType.PROPERTY;
% get a request to search Doc Center
request = com.mathworks.helpsearch.reference.ClassEntityListRequest(searchTerm,propertyType);

% create a retriever to extract content
baseRetriever = com.mathworks.mlwidgets.help.DocCenterReferenceRetrievalStrategy.createDataRetriever;
c1 = onCleanup(@()baseRetriever.close());

% create a grouped retriever to extract grouped content
groupRetriever = com.mathworks.helpsearch.reference.GroupedReferenceDataRetriever(baseRetriever);
c1 = onCleanup(@()groupRetriever.close());

% handle doc content that is grouped
grouped = groupRetriever.getReferenceData(request);
propStruct(index).Properties = [];


groupsToQuery = grouped.getEntityGroups;
if ~grouped.getUngroupedEntities.isEmpty
    groupsToQuery = grouped.getUngroupedEntities.toArray;
end
propStruct(index).Properties = getComponentProperties(groupsToQuery);
end

function props = getComponentProperties(groupedProps)
% iterates over groups to get component properties
props =[];
groupIterator = groupedProps.iterator;
while(groupIterator.hasNext())
    group = groupIterator.next();
    % concate properties for each group
    props = [props; getPropertiesCell(char(group.getName()), group.getItems().toArray())];
end
end

function propStruct = getPropertiesCell(groupName, items)
% converts Doc Center data into a struct with relevant fields
props = cell(length(items), 5);
for i = 1:length(items)
    propName = regexp( char(items(i).getRefEntity.getName), '\.(.*?)$', 'tokens', 'once');
    props{i, 1} = propName{1}; % property name
    props{i, 2} = char(items(i).getPurposeLine());  % purpose
    props{i, 3} = char(items(i).getInputValues()); % inputs
    props{i, 4} = char(items(i).getRelativePath()); % help path
    props{i, 5} = groupName; % group
end
propStruct = struct('property', props(:,1), 'description', props(:,2), 'inputs', props(:,3), 'helpPath', props(:,4), 'group', props(:,5));
end


function map = buildSearchTermMap()
% gets a map of component classes to CSH search term mapping

import appdesigner.internal.application.appmetadata.createComponentAdapterMap;
adapterMap = createComponentAdapterMap();
adapterClasses = adapterMap.values;

searchTerms = cell(1, length(adapterClasses));
for i = 1:length(adapterClasses)
    adapter = eval(adapterClasses{i});
    if(isprop(adapter, 'CSHSearchTerm'))
        searchTerms{i} = adapter.CSHSearchTerm;
    else
        searchTerms{i} = '';
    end
end
map = containers.Map(adapterMap.keys, searchTerms);
end