Ignore:
Timestamp:
07/08/13 23:04:56 (11 years ago)
Author:
psniegowski
Message:

HIGHLIGHTS:

CHANGELOG:
Get data also on tree expansion.

Use nice framstick icon for empty nodes.

Update panel after reload if it is current.

Add shallow reload procedure.

Cut Gui prefix from several tree classes.

Bring back counter of GuiTreeNode?.

Use IdentityHashMap? were it is more appriopriate.

Remove TreeListener?.

Do not use TreeListener? in GUI.

Minor change.

Done migration to GuiTreeModel?.

BrowserTest? in that version always crashes frams.linux.

Move rendering implementation into GuiAbstractNode?.

Use hand-crafted list in GuiTreeNode?.

Generally, it would be a great place for WeakIdentityHashMap?
(but there is none in Java Collection Framework).

Remove superfluous logging.

Fix bug in GuiTreeNode?.

Use IdentityHashMap? instead of HashMap?.

Improve structure update.

Filter out invalid uids in UniqueListAccess?.

Improve TreeCellRenderer?.

Add filtering in TrackConsole?.

Improve TreeModel?.

More changes.

More improvements.

More changes.

Remove TreeNode?.

Support MetaNode? in the GuiTreeModel?.

Implement more in GuiTreeModel?.

Add CompositeParam? interface to FramsClass? and AccessInterface?.

Allow access by number to UniqueList?.

Add UidComparator?.

Use TreeMap? as a default accessee in unique list.

It keeps order of keys.

Introduce classes to use with new TreeModel?.

Another step.

Migrate from TreeNode? to Node in many places.

Remove some uses of TreeNode? as DefaultMutableTreeNode?.

Remove Path from TreeNode? interface.

Remove Path from TreeNode?.

Add Path recration from node feature.

Reworking TreeCellRenderer?.

Minor change of TreeOperations? interface.

Remove last methods from TreeNode?.

Another minor step.

Do not store reference to TreeAtFrame? in TreeNode?.

Add proxy exceptionHandler to StatusBar?.

Move panels management to TreeAtFrame?.

Store localChanges in the NodeAtFrame?.

More cleanup.

Move name computing to TreeCellRenderer?.

Move tooltip and icon computations to TreeCellRenderer?.

More dispatches removed.

Remove most dispatching from TreeNode?.

TreeNode? does not actually redispatch tasks.

Make Tree embedded in Browser use SwingDispatcher?.

Make lazy binding of Tree with Dispatcher.

Minor changes.

Organizational change in AbstractTree?.

Make AbstractTree? compose from Thread instead of inherit from it.

Make SwingDispatcher? and AtOnceDispatcher? Joinable compatible.

Add ListPanelProvider?.

Improve Controls readonly and enabled handling.

Properly pass ExceptionHandlers? in more places.

Make Tree.get accept ValueParam?.

  • This is to allow access number of list elements.

Remove not needed get redirection in ClientAtServer?.

Rename tryResolve to tryGet.

Unify tryResolveAndGet into tryResolve.

Remove resolveTop from Tree interface.

Make Tree.get accept Future<Path>.

Use get to implement resolveTop also in ObjectTree?.

Unify resolveTop and get in RemoteTree?.

Another minor step.

More minor changes in tree operations.

Minor organizational changes.

In RemoteTree? first fetch info for root.

Reworking resolving.

Minor changes.

Make ListAccess? return proxy iterators (instead of creating temporary collection).

Let AccessInterface? return Iterable<Param>.

Improve resolving.

More improvements.

First working completion in ManagedConsole?.

Rename resolve to resolveTop.

This reflects the actuall functionality.

Change semantic of tryResolve and tryResolveAndGet.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • java/main/src/main/java/com/framsticks/gui/console/ManagedConsole.java

    r97 r98  
    33import java.util.LinkedList;
    44import java.util.List;
    5 
    65
    76import com.framsticks.communication.ClientSideManagedConnection;
     
    1110import com.framsticks.communication.Response;
    1211import com.framsticks.communication.queries.ApplicationRequest;
     12import com.framsticks.core.Mode;
    1313import com.framsticks.core.Path;
    1414import static com.framsticks.core.TreeOperations.*;
     
    1717import com.framsticks.params.annotations.AutoAppendAnnotation;
    1818import com.framsticks.params.annotations.FramsClassAnnotation;
     19import com.framsticks.params.types.ListParam;
    1920import com.framsticks.remote.RemoteTree;
    2021import com.framsticks.util.FramsticksException;
     22import com.framsticks.util.dispatching.Dispatching;
    2123import com.framsticks.util.dispatching.FutureHandler;
     24import com.framsticks.util.dispatching.RunAt;
    2225import com.framsticks.util.lang.Casting;
    2326import com.framsticks.util.lang.Containers;
     
    2730@FramsClassAnnotation
    2831public class ManagedConsole extends InteractiveConsole {
     32
    2933
    3034        protected RemoteTree tree;
     
    7074        }
    7175
     76
    7277        @Override
    7378        protected void findCompletionPropositions(final String prefix) {
    7479                Pair<CharSequence, CharSequence> command = Request.takeIdentifier(prefix);
     80                if (command == null) {
     81                        return;
     82                }
    7583
    7684                Casting.throwCast(ApplicationRequest.class, Request.createRequestByTypeString(command.first.toString()));
     
    9098                // final Iterator<String> iterator = Path.splitPath(textual);
    9199
    92                 resolve(tree, textual, new FutureHandler<Path>(this) {
     100                tryGet(tree, textual, new FutureHandler<Path>(this) {
    93101
    94102                        @Override
    95                         protected void result(Path path) {
     103                        protected void result(final Path path) {
    96104                                if (!textual.startsWith(path.getTextual())) {
    97105                                        throw new FramsticksException().msg("invalid state").arg("line", prefix).arg("path", path);
    98106                                }
     107                                assert path.getTree().isActive();
    99108
    100                                 List<String> propositions = new LinkedList<String>();
    101                                 String remaining = textual.substring(path.getTextual().length());
    102                                 remaining = Path.PathBuilder.splitPath(remaining).next();
     109                                final Runnable finalizeCompletion = new Runnable() {
     110                                        @Override
     111                                        public void run() {
     112                                                String remaining = textual.substring(path.getTextual().length());
    103113
    104                                 for (CompositeParam p : Containers.filterInstanceof(bindAccess(path).getParams(), CompositeParam.class)) {
    105                                         if (p.getId().startsWith(remaining)) {
    106                                                 propositions.add(p.getId());
     114                                                String base = prefix.substring(0, prefix.length() - (textual.length() - path.getTextual().length()));
     115                                                if (path.size() > 1) {
     116                                                        base = base + "/";
     117                                                }
     118
     119                                                if (remaining.startsWith("/")) {
     120                                                        remaining = remaining.substring(1);
     121                                                }
     122
     123                                                if (remaining.indexOf('/') != -1) {
     124                                                        /** It is to long. */
     125                                                        return;
     126                                                }
     127                                                final List<String> propositions = new LinkedList<String>();
     128                                                for (CompositeParam p : Containers.filterInstanceof(bindAccess(path).getParams(), CompositeParam.class)) {
     129                                                        if (remaining.equals("") || p.getId().startsWith(remaining)) {
     130                                                                propositions.add(base + p.getId());
     131                                                        }
     132                                                }
     133
     134                                                dispatch(new RunAt<ManagedConsole>(ManagedConsole.this) {
     135
     136                                                        @Override
     137                                                        protected void runAt() {
     138                                                                processCompletionResult(prefix, propositions);
     139                                                        }
     140                                                });
    107141                                        }
     142                                };
     143
     144                                if (path.getTop().getParam() instanceof ListParam) {
     145                                        tree.get(path, Mode.FETCH, new FutureHandler<Path>(ManagedConsole.this) {
     146                                                @Override
     147                                                protected void result(Path result) {
     148                                                        finalizeCompletion.run();
     149                                                }
     150                                        });
     151                                        return;
    108152                                }
    109                                 processCompletionResult(prefix, propositions);
     153                                finalizeCompletion.run();
     154
    110155                        }
    111156                });
     
    119164                connection = tree.getConnection();
    120165        }
     166
     167        @Override
     168        protected void joinableStart() {
     169                super.joinableStart();
     170                Dispatching.use(tree, this);
     171        }
     172
     173        @Override
     174        protected void joinableInterrupt() {
     175                Dispatching.drop(tree, this);
     176                super.joinableInterrupt();
     177        }
     178
     179        @Override
     180        protected void joinableJoin() throws InterruptedException {
     181                Dispatching.join(tree);
     182                super.joinableJoin();
     183        }
    121184}
Note: See TracChangeset for help on using the changeset viewer.