// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

library instance_view_element;

import 'dart:async';
import 'observatory_element.dart';
import 'package:observatory/service.dart';
import 'package:polymer/polymer.dart';

@CustomTag('instance-view')
class InstanceViewElement extends ObservatoryElement {
  @published Instance instance;

  InstanceViewElement.created() : super.created();

  instanceChanged(oldValue) {
    if (instance != null) {
      // We load typeClass and typeArguments because we want to
      // display this info.
      if (instance.typeClass != null) {
        instance.typeClass.load();
      }
      if (instance.typeArguments != null) {
        instance.typeArguments.load();
      }
    }
  }

  Future<ServiceObject> evaluate(String expression) {
    return instance.evaluate(expression);
  }

  Future setBreakOnActivation() {
    return instance.isolate.addBreakOnActivation(instance)
        .then((_) => refresh());
  }

  Future clearBreakOnActivation() {
    return instance.isolate.removeBreakpoint(instance.activationBreakpoint)
        .then((_) => refresh());
  }

  Future refresh() {
    return instance.reload();
  }
}
